ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Apache DataFusion 24.0.0 版本深度解读:DDL 计划统一重构、流式聚合与执行引擎精简

Apache DataFusion 24.0.0 版本深度解读:DDL 计划统一重构、流式聚合与执行引擎精简 大数据数据分析后端【免费下载链接】datafusionApache DataFusion SQL Query Engine项目地址https://gitcode.com/gh_mirrors/datafu/datafusion点击查看免费下载导读本文基于 Apache DataFusion 官方 24.0.0 版本发布说明dev/changelog/24.0.0.md展开系统梳理该版本在逻辑计划LogicalPlanDDL 结构统一、执行引擎精简、流式聚合、排序等价推导、类型系统增强等方面的关键变更并结合当前仓库中的源码与测试文件进行验证。读完本文你将了解 24.0.0 升级时需要注意的破坏性变更Breaking Changes掌握date_bin、流式聚合、Ordering Equivalence 等新特性的用法与底层实现位置并能据此评估这些改动对上层应用的影响。DataFusion 24.0.0 发布于 2023-05-06是连接 23.0.0 与 25.0.0 之间的一个重要版本。该版本整体呈现精简执行内核 增强查询优化 补齐 SQL 能力三条主线一方面移除基于 cranelift 的 JIT 与基于 Rayon 的 Scheduler清理连接内存核算另一方面引入流式聚合、排序等价推导、自适应内存排序与并发物理规划等优化同时在 DDL、类型系统与 CLI 层面补齐了多项实用能力。版本概览从 dev/changelog/24.0.0.md 的变更清单看24.0.0 共包含5 项 Breaking changes破坏性变更14 项 Implemented enhancements功能增强11 项 Fixed bugs缺陷修复2 项 Documentation updates文档更新近百项合并的 Pull Request覆盖 DDL 重构、Arrow 版本升级、sqllogictest 测试迁移与基准测试基建等其中多个 PR 直接重塑了执行引擎的架构升级到该版本时建议关注下文列出的破坏性变更。Breaking Changes升级前必须关注的 5 项变更1. DDL 计划结构统一收敛为LogicalPlan::Ddl相关 PR#6121、#614424.0.0 将原先分散在LogicalPlan::Create*各变体中的 DDL 相关计划结构抽取为统一的LogicalPlan::Ddl变体#6121随后又补齐了LogicalPlan::Drop*系列 DDL 结构的抽取#6144使 CREATE/DROP 类语句在逻辑计划层拥有一致的表示。这是一项面向内部的架构重构但其影响是双向的一方面让 DDL 的解析、优化与执行路径更集中便于后续扩展新的 DDL 语句另一方面任何直接匹配LogicalPlan::CreateTable、LogicalPlan::DropTable等旧变体的下游代码如自定义优化规则、Explain 展示、逻辑计划序列化都需要改为处理LogicalPlan::Ddl。在同一周期内DmlStatement 也被拆分到独立模块#6120逻辑计划的模块化程度进一步提升。2. 移除基于 cranelift 的 JIT 与jitfeature相关 PR#616424.0.0 移除了基于 cranelift 的 JIT 编译能力以及对应的jitfeature#6164。这意味着从该版本起DataFusion 不再通过即时编译来加速表达式求值运行时路径统一走向量化的内核求值方式。对于使用者而言凡是依赖jitfeature 构建的配置或特性检测代码升级后都需要清理。3. 移除基于 Rayon 的 Scheduler相关 PR#616924.0.0 移除了基于 Rayon 的 Scheduler#6169执行调度器进一步收敛到单一实现。对上层 API 使用者来说ExecutionContext/SessionContext层面的执行入口没有变化但内部调度模型被简化依赖 Rayon 调度行为的自定义执行扩展需要重新评估。4. 连接内存核算清理相关 PR#6188、#617024.0.0 清理了 CrossJoin 与 NestedLoopsJoin 的内存核算#6188并简化了 HashJoin 的内存核算逻辑#6170。这些改动统一了 join 内存使用的统计口径属于行为层面的细微变化——依赖内存核算结果做资源控制的场景统计数值可能与旧版本不完全一致。5. 其他结构性清理此外该版本还移除了一些旧 API 与冗余代码default_session_builder被标记为 deprecated 并补上 since 标注#6123Remove input schema from PhysicalExpr#6122将输入 schema 从物理表达式上剥离、把校验逻辑移入物理表达式规划器Scalar Subquery校验逻辑被移入 Analyzer#6084。这些都是影响面较广的架构调整第三方代码若直接使用这些内部接口需同步适配。功能增强时间、聚合、排序与类型系统1. 时间序列下采样date_bin输出类型与输入类型一致相关 PR#6053date_bin是 DataFusion 用于时间序列分桶/开窗下采样的核心函数。24.0.0 修复了date_bin输出类型与输入类型不一致的问题使其对 Timestamp纳秒/微秒/毫秒/秒精度与 Time 类型均返回与输入相同精度的类型。函数签名为date_bin(interval, expression[, origin_timestamp])其语义与用法定义在 datafusion/functions/src/datetime/date_bin.rs 的文档注释中并注册于 datafusion/functions/src/datetime/mod.rs。该函数将输入时间戳映射到其所在分桶区间的起始时间例如 15 分钟分桶时2023-01-01T18:18:18Z会被映射到2023-01-01T18:15:00Z-- 按 1 天分桶 SELECT date_bin(interval 1 day, time) as bin FROM VALUES (2023-01-01T18:18:18Z), (2023-01-03T19:00:03Z) t(time); --------------------- | bin | --------------------- | 2023-01-01T00:00:00 | | 2023-01-03T00:00:00 | ---------------------第三个参数origin_timestamp用于指定分桶边界起点缺省为1970-01-01T00:00:00ZUTC 的 UNIX 纪元支持的区间单位包括纳秒、微秒、毫秒、秒、分钟、小时、天、周、月、年与世纪。例如从 3AM 起点按 1 天分桶 SELECT date_bin(interval 1 day, time, 2023-01-01T03:00:00) as bin FROM VALUES (2023-01-01T18:18:18Z), (2023-01-03T19:00:03Z) t(time); --------------------- | bin | --------------------- | 2023-01-01T03:00:00 | | 2023-01-03T03:00:00 | ---------------------该函数的边界错误与类型约束可参考 datafusion/sqllogictest/test_files/date_bin_errors.slt时间戳语义的覆盖可参考 datafusion/sqllogictest/test_files/datetime/timestamps.slt。2. 流式聚合分组键有序时不打断流水线相关 PR#6124、#6036、#6141、#616824.0.0 的核心优化之一是流式聚合Streaming Aggregation当GROUP BY列已按序排列时聚合不再打断执行流水线#6124V2 版本从而避免不必要的 shuffle 与中间排序。配套地还实现了无序PARTITION BY列的窗口处理#6036以防止流水线中断并为AggregateExec增加了GroupByOrderMode的展示#6141与文档修正#6168。从当前仓库结构看聚合执行相关的流式/分组实现在 datafusion/physical-plan/src/aggregates/ 下含grouped_hash_stream.rs、hash_stream.rs、single_stream.rs等分组聚合的等价与重分区测试则集中在 datafusion/core/tests/fuzz_cases/equivalence/ 中。流式聚合对有序数据的查询收益明显——省去了一次全局排序或重分区同时repartition_subset_satisfaction.sltdatafusion/sqllogictest/test_files/repartition_subset_satisfaction.slt与 datafusion/sqllogictest/test_files/group_by.slt 中也有相关行为验证。3. 排序等价Ordering Equivalence推导相关 PR#616024.0.0 引入排序等价Ordering Equivalence支持使得优化器能够推导满足某一排序要求的同时也满足另一等价排序要求的关系例如a ASC与a ASC, b ASC之间的蕴含关系或a b时按a排序等价于按b排序。这对后续物理优化器推导排序需求、减少不必要的SortExec至关重要。当前仓库中 datafusion/core/tests/fuzz_cases/equivalence/ 专门对等价类推导做了模糊测试fuzz test覆盖。4. 性能优化自适应内存排序、并发物理规划与并行 collect自适应内存排序Adaptive in-memory sort#6163排序实现在输入规模不同时自适应选择更优策略该 PR 声明可带来约 2 倍加速。并发物理规划Concurrent physical planning#6138物理计划构建阶段支持并发执行缩短规划耗时。并行化collect_partitioned#6109分区结果收集过程并行化减少查询收尾阶段的串行瓶颈。简化并加速MemoryExec插入路径#6236、#6154。这些优化都属于执行内核层面的基础设施改进对大规模聚合、排序与多分区查询的端到端延迟有直接帮助。5. 类型系统与表达式增强科学计数法支持#6142移除旧版对科学计数法字面量的unimplemented()现在可以直接解析1e10这类写法。无符号 64 位整型字面量支持#6146。Sum/Avg聚合支持 Dictionary 类型输入#6197并在add_to_row/update_avg_to_row中处理ScalarValue::Dictionary#6175。时间类型算术允许标量作为左侧操作数#6196例如interval 1 day date_col的形态更自由。Decimal 乘法允许精度损失#6103放宽了 decimal 乘法的精度规则避免合法查询因精度回退被拒绝。修复Interval - Date的类型强制#6177并重构了get_result_type与coerce_type的职责拆分#6221、#6241、#6250。6. SQL 与 DDL 能力补齐DROP SCHEMA语句支持#6096补齐了 schema 维度的 DDL 操作。SELECT INTO支持#6219允许将查询结果直接写入新表。修复GROUP BY中重复表达式的问题#6091、#6097允许GROUP BY出现相同表达式。修复带窗口操作时错误的列裁剪#6039。允许通过 SQL 创建无限外部表#6235供测试使用。7. 配置与 CLI 增强聚合中标量更新阈值可配置#6166将何时使用标量更新scalar update的阈值从硬编码改为可配置项相关会话配置定义可参考 datafusion/common/src/config.rs。ExecutionContext增加version字段#6052便于在运行时识别引擎版本。SessionConfig新增from_string_hash_map()方法#6111支持从字符串哈希映射构造会话配置。CLI 支持 AWS 命名配置文件#6161datafusion-cli 的 S3/对象存储相关接入代码位于 datafusion-cli/src/ 下。Bug 修复盘点24.0.0 修复的缺陷覆盖执行、优化与类型三层执行层使用 Arrow 的bitwise_op内核实现位运算#6093修复ScalarValue::Struct的 null 处理#6085ProjectionExec/AggregateExec的output_ordering()与output_partitioning()列映射错误#6113Source projection 的输出排序问题#6136DATE_TRUNC支持大写粒度关键字#6185。优化层simplify_expressions使用单一 schema 做解析#6077reassign_predicate_columns对 in-list 表达式的处理#6114common_subexpr_eliminate与聚合/关系组合时的正确性#6129、#6199优化器不再把失败规则当作内部错误#6184。基础设施修复因 bors 合并问题导致的 sqllogictest 失败#6242将若干debug日志降级为trace以减少执行期日志开销#6193。工程化与测试基础设施1. 大规模迁移 sqllogictest24.0.0 将大量单元测试迁移到 sqllogictest 框架涉及 GROUP BY#6100、#6088、select#6158、union#6224、expr#6240、cast#6244、identifiers#6245、wildcard#6249、set_variable#6255、errors#6239以及 interval 算术#6201等。当前仓库的 SQL 逻辑测试文件统一收在 datafusion/sqllogictest/test_files/ 下便于批量验证 SQL 语义。2. 基准测试基建bench.sh 与 compare.py#6131 引入了 benchmarks/bench.sh 脚本用于自动化对 DataFusion 自身进行基准测试对比#6172 为其增加了 parquet filter 与 sort 场景benchmarks/compare.py 的对比输出也改用min时间与更清晰的列标题#6134。db-benchmark 相关用例则被迁移到 arrow-datafusion-python 仓库维护#6204。3. 依赖与文档Arrow 升级到 38#6115substrait 依赖升级到 0.8.0#6105regex 升级到 0.7.1#6095。更新了SessionContext、TaskContext等 API 文档#6106并整合了 datafusion-cli 文档#6218。升级建议与总结Apache DataFusion 24.0.0 是一个架构收敛性质的版本升级时优先适配若你的代码直接匹配LogicalPlan::Create*/Drop*变体需要迁移到LogicalPlan::Ddl若启用了jitfeature 或依赖 Rayon Scheduler需要移除对应配置依赖 join 内存核算精确数值的资源管控逻辑也可能有微小变化。可立即受益的特性流式聚合、排序等价推导、并发物理规划、自适应内存排序对有序数据、聚合查询与多分区查询均有实际收益建议升级后用 EXPLAIN 观察执行计划中SortExec与 shuffle 是否减少。新 SQL 能力SELECT INTO、DROP SCHEMA、科学计数法与 uint64 字面量让 SQL 兼容面更完整date_bin的类型一致性让时间序列下采样在 Timestamp 各精度间不再产生隐式转换开销。总体而言24.0.0 通过移除 JIT 与 Rayon Scheduler 精简了执行内核通过 DDL 统一重构梳理了逻辑计划并通过流式聚合与排序等价等特性把查询优化的边界向前推进——这也是 DataFusion 从能跑走向跑得高效过程中的关键一步。赞分享大数据数据分析后端【免费下载链接】datafusionApache DataFusion SQL Query Engine项目地址https://gitcode.com/gh_mirrors/datafu/datafusion点击查看免费下载相关推荐Apache DataFusion 17.0.0 版本解析ReadOptions 重构、Substrait 深化与执行引擎语义修正Apache DataFusion 17.0.0 版本解析ReadOptions 重构、Substrait 深化与执行引擎语义修正 Apache DataFu大数据数据分析后端Apache DataFusion执行引擎深度解析迭代器vs拉取式执行模型Apache DataFusion执行引擎深度解析迭代器vs拉取式执行模型 Apache DataFusion是一个高性能的SQL查询引擎其独特的执行模型设大数据数据分析后端Apache Arrow C Acero 流式执行引擎 API 完全指南构建与运行执行计划Apache Arrow C Acero 流式执行引擎 API 完全指南构建与运行执行计划 AceroStreaming Execution是 Apa大数据数据分析数据工程序列化上一篇免费天气APIOpen-Meteo 小时级预报下一篇LogExpert终极指南Windows平台最强大的免费开源日志分析工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表