Spark SQL、Hive SQL运行流程解析及对比


Spark SQL 是 Apache Spark 提供的用于 结构化数据处理的模块,它允许 使用 SQL 语句查询数据,同时 支持DataFrame和Dataset API

一、Spark SQL 运行过程详解

1. SQL 解析(Parsing)

  • 用户提交一条 SQL 语句(例如 SELECT * FROM table WHERE id > 10)。
  • Spark SQL 的解析器(Parser)会将 SQL 语句转换成抽象语法树(AST,Abstract Syntax Tree)。
  • 解析器会检查 SQL 语法是否正确,如果语法错误会抛出异常。

2. 逻辑计划生成(Logical Plan)

  • 解析后的 AST 会被转换成一个未解析的逻辑计划(Unresolved Logical Plan)。
  • 这个逻辑计划是对查询的抽象表示,包含了查询的各个操作(如过滤、投影、连接等),但字段和表名还未解析
  • 接下来,Spark 会根据 Catalog(元数据存储,包含表结构、函数信息等)解析表名、列名,生成解析后的逻辑计划(Resolved Logical Plan)。

3. 逻辑计划优化(Logical Optimization)

  • 解析后的逻辑计划会被传入 Catalyst 优化器
  • Catalyst 优化器会应用一系列规则(Rule-based Optimizations),例如:
    • 常量折叠(Constant Folding):将表达式中常量计算提前。
    • 谓词下推(Predicate Pushdown):将过滤条件尽可能早地应用,减少数据量。
    • 投影剪裁(Projection Pruning):只读取和处理必要的列。
    • 子查询消除连接重排序等。
  • 优化后生成优化的逻辑计划(Optimized Logical Plan)。

4. 物理计划生成(Physical Planning)

  • Catalyst 会将优化后的逻辑计划转换成一个或多个物理计划(Physical Plan)。
  • 物理计划描述了具体的执行策略,比如使用哪种连接算法(Broadcast Hash Join、Sort Merge Join等)、是否使用缓存等。
  • Spark 会根据成本模型(Cost Model)选择最优的物理计划

5. 代码生成(Code Generation)

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值