31次主要版本更新
| 41.0.0 | 2024年8月11日 | 
|---|---|
| 40.0.0 | 2024年7月12日 | 
| 39.0.0 | 2024年6月10日 | 
| 38.0.0 | 2024年5月10日 | 
| 9.0.0 | 2022年6月13日 | 
#55 在 数据库接口
720,267 每月下载量
用于 119 个crate (9 直接)
2.5MB
 47K  SLoC
DataFusion SQL查询规划器
此crate提供了一款通用的SQL查询规划器,可以解析SQL并将查询转换为逻辑计划。尽管此crate被DataFusion查询引擎使用,但它被设计成易于从任何需要SQL查询规划器的项目中使用,并且不对结果逻辑计划如何转换为物理计划做任何假设。例如,在逻辑计划中没有基于行与基于列执行的概念。
使用示例
请参阅示例目录以获取完全工作的示例。
以下是从SQL字符串生成逻辑计划的示例。
fn main() {
    let sql = "SELECT \
            c.id, c.first_name, c.last_name, \
            COUNT(*) as num_orders, \
            SUM(o.price) AS total_price, \
            SUM(o.price * s.sales_tax) AS state_tax \
        FROM customer c \
        JOIN state s ON c.state = s.id \
        JOIN orders o ON c.id = o.customer_id \
        WHERE o.price > 0 \
        AND c.last_name LIKE 'G%' \
        GROUP BY 1, 2, 3 \
        ORDER BY state_tax DESC";
    // parse the SQL
    let dialect = GenericDialect {}; // or AnsiDialect, or your own dialect ...
    let ast = Parser::parse_sql(&dialect, sql).unwrap();
    let statement = &ast[0];
    // create a logical query plan
    let schema_provider = MySchemaProvider::new();
    let sql_to_rel = SqlToRel::new(&schema_provider);
    let plan = sql_to_rel.sql_statement_to_plan(statement.clone()).unwrap();
    // show the plan
    println!("{:?}", plan);
}
这是从示例生成的逻辑计划。请注意,这是一个未优化的逻辑计划。datafusion-optimizer crate提供了一款查询优化器,可以将此crate生成的计划进行优化。
Sort: state_tax DESC NULLS FIRST
  Projection: c.id, c.first_name, c.last_name, COUNT(Int64(1)) AS num_orders, SUM(o.price) AS total_price, SUM(o.price * s.sales_tax) AS state_tax
    Aggregate: groupBy=[[c.id, c.first_name, c.last_name]], aggr=[[COUNT(Int64(1)), SUM(o.price), SUM(o.price * s.sales_tax)]]
      Filter: o.price > Int64(0) AND c.last_name LIKE Utf8("G%")
        Inner Join: c.id = o.customer_id
          Inner Join: c.state = s.id
            SubqueryAlias: c
              TableScan: customer
            SubqueryAlias: s
              TableScan: state
          SubqueryAlias: o
            TableScan: orders
依赖项
~15–24MB
~342K SLoC