大数据数据分析后端【免费下载链接】datafusionApache DataFusion SQL Query Engine项目地址https://gitcode.com/gh_mirrors/datafu/datafusion点击查看免费下载Apache DataFusion 40.0.0 是一个以引擎内功重构为核心的里程碑版本由 64 位贡献者合入 263 个提交主要围绕聚合函数 UDAF 化、Parquet 元数据级查询加速、外部文件格式写入抽象以及用户自定义 SQL 规划这四大方向展开。阅读本文你将理解这批 Breaking Changes 对 API 使用方式的具体影响掌握数据页统计与ParquetAccessPlan带来的剪枝能力并了解如何在自定义数据源与 SQL 扩展场景中落地新的扩展点。版本概况与主线梳理40.0.0 版本延续了 DataFusion 自 38.x 起将内置聚合函数迁移为AggregateUDF的长期工程方向并在此基础上铺开了四条主线聚合函数全面 UDAF 化string_agg、bool_and/bool_or、avg、nth_value等一批内置聚合被重构为统一 UDAF 实现行为与注册方式发生破坏性变更Parquet 数据页统计能力落地Int8/Int16、UInt、Timestamp、Binary/Utf8、Date、Decimal、Dictionary 等类型陆续获得 data page 级统计提取支持为行组之外更细粒度的谓词剪枝打下基础外部文件格式写入抽象新增FileTypetrait使COPY TO可以支持用户自定义的文件格式SQL 扩展点开放用户可注册自定义AnalyzerRule、ExprPlanner会话级 SQL 规划能力进一步可插拔。Breaking Changes升级 40.0.0 前必须了解的改动聚合函数 UDAF 化StringAgg / bool_and / bool_or / Average / nth_value本版本将StringAggstring_agg、bool_and/bool_or、Averageavg以及nth_value从内置聚合实现迁移为标准的AggregateUDF。从源码结构看这些函数如今与用户自定义聚合函数共用同一套实现框架。以string_agg为例其实现位于 datafusion/functions-aggregate/src/string_agg.rs通过宏make_udaf_expr_and_func!同时生成表达式构造器与 UDAF 注册入口并实现了AggregateUDFImpltrait 的签名、文档与累加器逻辑bool_and/bool_or对应 bool_and_or.rsnth_value对应 nth_value.rsavg的迁移则见 PR #10964。对普通 SQL 用户而言这些函数的语法与语义保持不变但对 Rust API 使用者影响体现在两点原来通过expr_fn::sum、expr_fn::count等函数构造聚合表达式的路径被移除或替换为函数存根见 PR #10816、#10831请改用各函数对应的 UDAF 注册名若你自行实现了与这些函数同名的自定义聚合注册时的命名冲突与优先级行为需要重新评估参见 datafusion/expr/src/udaf.rs 中 UDAF 注册与解析逻辑。配合这次迁移Count被移动到functions-aggregatecrate并同步将最低支持 Rust 版本MSRV提升到 1.75PR #10484stddev/stddev_pop、variance、approx_median、approx_distinct、regr_*、correlation、grouping、位运算聚合BitAnd/BitOr/BitXor等也在该版本周期内陆续完成 UDAF 化。ExecutionPlan::name() 与 trait object 引用返回PR #11047 移除了ExecutionPlan::name()上的Sized约束PR #11103 将相关访问器改为返回Arcdyn ...引用而非 Arc 本身。这对实现自定义ExecutionPlan的开发者意味着 trait 方法签名更宽松但下游调用处可能需要解引用调整。Expr 别名处理与 Filter 语义收拢Filter::remove_aliases被合并进Expr::unalias_nestedPR #11001逻辑计划层面去除多余别名统一收敛为表达式方法Filter::try_new现在直接剥离表达式中的别名而不是报错PR #11307filter 构造更宽容通配符限定符类型从String改为TableReferencePR #11073涉及 schema 投影的 API 调用方需同步迁移。实现增强Parquet 数据页统计与细粒度剪枝数据页统计Data Page Statistics类型覆盖DataFusion 此前主要依赖 Parquet 文件 footer 中的行组级row group统计做谓词剪枝。40.0.0 通过StatisticsConverter来自 parquet 生态的parquet::arrow::arrow_reader::statistics::StatisticsConverter逐步补齐 data page 级统计的提取能力使剪枝可以细化到页级别数值类型Int8/Int16PR #10931、UInt 系列PR #11018、Float16/32/64PR #10982、Decimal/Decimal256PR #11138时间类型TimestampPR #11123、DatePR #11135、TimePR #11187字符与字典类型Binary/LargeBinary/Utf8/LargeUtf8PR #11136、DictionaryPR #11169、#11195、FixedSizeBinaryPR #11200其他BooleanPR #11054并修复了全 null 数据页统计PR #11295。上述能力在仓库中的落点集中在 datafusion/datasource-parquet/src/metadata.rsStatisticsConverter::try_new将ParquetMetaData中的 footer 统计转换为 DataFusion 的Statistics供行组剪枝与页级访问规划消费同时data_page_row_count_limit、data_pagesize_limit等会话配置见 datafusion/datasource-parquet/src/file_format.rs控制页级统计读取的边界。ParquetAccessPlan用户自定义行组访问计划PR #10813 让ParquetExec支持用户自定义的ParquetAccessPlan并对其select方法增加了校验。该类型定义在 datafusion/datasource-parquet/src/access_plan.rs用于指定每个行组是跳过、全扫还是只扫描某些行区间// 默认扫描全部 4 个行组 let mut access_plan ParquetAccessPlan::new_all(4); access_plan.skip(0); // 跳过行组 0 // 行组 1 中仅扫描第 100-200 与 350-400 行 let row_selection RowSelection::from(vec![ RowSelector::skip(100), RowSelector::select(100), RowSelector::skip(150), RowSelector::select(50), RowSelector::skip(600), ]); access_plan.scan_selection(1, row_selection); access_plan.skip(2); // 跳过行组 2行组 3 保持全扫这一机制常与外部索引配合文件级RowSelection可通过PartitionedFile::with_extension附加到ParquetRowSelection上由 DataFusion 在打开文件时按行组元数据拆分仓库配套的测试与示例见 datafusion/core/tests/parquet/external_access_plan.rs 与 advanced_parquet_index.rsPR #10701 引入。剪枝路径的整合与统计性能优化PR #10802 将 Parquet 行组剪枝收敛为单次PruningPredicate::prune调用并更新了StatisticsExtractorAPI减少元数据读取开销PR #10932 提升 Parquet 统计转换性能PR #11319 针对 Binary/String/Boolean 数组优化统计转换PR #10946 修复了缺失列时StatisticsConverter的 counts 计算PR #10973 让row_group_row_count返回Option更精确表达未知行数语义。外部文件格式与 COPY TOFileType trait 抽象PR #11060 为COPY TO引入FileTypetrait使得写出端不再被内置格式绑死。trait 定义在 datafusion/common/src/file_options/file_type.rspub trait FileType: GetExt Display Send Sync { fn as_any(self) - dyn Any; }它通过GetExt提供扩展名如.parquet、.csv并允许as_any下转型到具体实现。在规划层ContextProvider::get_file_type见 datafusion/expr/src/planner.rs根据扩展名解析COPY语句对应的文件类型注册新格式后即可让COPY TO写出自定义格式文件。仓库文档同步补充了自定义文件格式的COPY TO示例PR #11174相关实现与测试见 datafusion/datasource/src/file_format.rs 与 datafusion/sql/tests/common/mod.rs。SQL 扩展点AnalyzerRule、ExprPlanner 与 SessionContext 增强会话级 AnalyzerRule 注册PR #10849 为SessionContext新增add_analyzer_rule方法可向会话状态注入自定义分析规则。实现见 datafusion/core/src/execution/context/mod.rsSessionContext::add_analyzer_rule委托给SessionState。配套的独立示例演示了用AnalyzerRule实现行级访问控制PR #11089是构建多租户数据过滤的实用范本。用户自定义 SQL PlannerExprPlannerPR #11180 引入用户自定义 SQL planner API经多轮迭代#11180 → #11208 → #11253 → #11296 → #11338定型为ExprPlanner开发者可实现ExprPlanner接口将自定义 SQL 函数表达式映射为 DataFusion 逻辑表达式并通过FunctionRegistry/SessionState注册。规划器接口位于 datafusion/expr/src/planner.rs仓库内置了extract、position、substring、create_struct/create_named_struct、sql_substring_to_expr等一批参考实现见 datafusion/functions/src/core/planner.rs、datafusion/functions/src/datetime/planner.rs、datafusion/functions/src/unicode/planner.rs测试见 datafusion/core/tests/user_defined/expr_planner.rs。UDTF 与 SQL 前端PR #11071 允许在SessionContext中访问/注册表函数register_udtf对应 datafusion/core/src/execution/context/mod.rs 中的RegisterFunction::Table分支PR #11088 新增独立 SQL 前端示例展示从 SQL 文本到逻辑计划的完整规划链路。查询正确性与算子修复本版本在 Join、窗口、子查询与数学函数上修复了一批影响正确性的缺陷Join修复带 join filter 的 SMJ outer join 错误 null 行PR #10892修复 OR 条件下 LEFT JOIN 求值错误PR #11203通过 anti join 支持NOT field IN (subquery)PR #10936HashJoin 在 Right join 时可保留右端排序PR #11276修复嵌套类型上的 hash joinPR #11232修复 LEFT SEMI filtered join 的流式行并发问题PR #11041。窗口内置窗口函数参数解析更宽容PR #11199Substrait 窗口支持 rows bounds 并校验测试计划可执行性PR #11278。子查询与 CTE修复子查询内定义的 CTE 越界逃逸问题PR #10954。数学函数gcd 负值PR #11099、gcd/LCM 溢出PR #11131、#11057、#11036、pow/阶乘/取负溢出PR #11124、#11134、#11084等均改为返回错误而非 panic。Substrait 互操作增强作为跨引擎查询计划交换协议Substrait 支持在本版本继续完善Join 消费端支持重复列名PR #11049并通过临时重命名规避冲突PR #11329新增Map类型转换PR #11129、struct 与 list 元素可空性忽略PR #10874、#11130、窗口函数复合名支持PR #11163ParquetExec 简单 select 的 Substrait 往返PR #10949以及 TPCH 集成测试逐步覆盖 tpch_1 ~ tpch_5PR #10842、#11234、#11298、#11311Substrait 依赖升级至 0.36.0PR #11328。其他值得关注的工程改动SQL 语法支持 DuckDB 风格 struct 语法PR #11214、substring作为substr别名注册为 UDFPR #11277、数组运算符在 parser 层改写为函数PR #11101、unnest支持递归与 filter 下推PR #11062、#10974、#11017。规划性能CommonSubexprEliminate通过减少 LogicalPlan/Expr 克隆带来约 2-3% 规划提速PR #10835并优化标识管理再提速约 10%PR #10473同时增强短路与 volatile 表达式处理PR #11197、#11265OptimizerRule::try_optimize被弃用并获得默认实现PR #11022、#11059。统计与类型min_statistics/max_statistics改为辅助函数PR #10866DFSchema::datatype_is_logically_equal公开PR #10867ScalarValue::Map实现PR #11224Float16 支持增强PR #11156。CLI 与示例CliSessionContexttraitPR #10890、PoolType参数处理重构PR #10940、基于 DataFusion 结构的 SQL 分析示例PR #10938、SQL 基础查询示例迁移至用户指南PR #11217。构建与依赖Arrow 升级至 52.1.0PR #11302sqllogictest 升级至 0.21PR #11189多 crate 启用clone_on_ref_ptrclippy 检查。升级建议与版本影响小结对于从 39.x 升级的开发者建议按以下顺序处理兼容性问题检查自定义聚合凡与string_agg、bool_and/bool_or、avg、nth_value、stddev、variance、approx_median等重名的注册或直接引用内置expr_fn::sum/count的代码需切换到 UDAF 注册与调用方式检查自定义ExecutionPlan适配name()去除Sized约束与Arc引用返回的新签名若使用Filter构造确认别名处理行为变更不再报错而是剥除别名关注 Parquet 侧若依赖行组剪枝行为可进一步利用数据页统计与ParquetAccessPlan获得更细粒度的跳过能力新扩展场景优先采用FileType、ExprPlanner、add_analyzer_rule等官方扩展点而非修改内置逻辑。完整的提交明细与贡献者名单见 dev/changelog/40.0.0.md各 PR 对应代码可在仓库相应 crate 中进一步查阅如 datafusion/functions-aggregate、datafusion/datasource-parquet/src、datafusion/expr/src/planner.rs。赞分享大数据数据分析后端【免费下载链接】datafusionApache DataFusion SQL Query Engine项目地址https://gitcode.com/gh_mirrors/datafu/datafusion点击查看免费下载相关推荐Apache DataFusion 39.0.0 版本全解析UDF 体系重构、Parquet 统计提取与规划性能优化Apache DataFusion 39.0.0 版本全解析UDF 体系重构、Parquet 统计提取与规划性能优化 Apache DataFusion 39大数据数据分析后端Apache DataFusion 38.0.0 版本深度解析UDAF 重构、TreeNode 规划提速与 Parquet Bloom Filter 默认开启Apache DataFusion 38.0.0 版本深度解析UDAF 重构、TreeNode 规划提速与 Parquet Bloom Filter 默认开启大数据数据分析后端Argo CD 跨命名空间管理 Applicationargocd-server 集群级 RBAC 示例详解Argo CD 跨命名空间管理 Applicationargocd server 集群级 RBAC 示例详解 导读 本指南围绕仓库中 examples/k8s大数据数据分析后端上一篇戴森球计划工厂蓝图库3000专业设计方案解析与技术架构深度剖析下一篇Citra 3DS模拟器如何在PC上完美运行任天堂3DS游戏创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
Atlas 300V部署YOLO全攻略:昇腾ACL模型转换与推理实践 最近在搞边缘端推理,手上正好有一块华为的Atlas 300V加速卡,24G显存版本。周围好几个朋友都在问这东西到底能不能跑YOLO,部署起来是不是特别麻烦。我自己从零开始踩了一轮坑,总算把YOLOv5和YOLOv8都跑通了,性能和精度都… · 2026/9/25 10:57:11
使用 AWS SDK for Java V2 构建照片智能分析 Web 应用(AWS Photo Analyzer)实战教程 示例工程教程后端 【免费下载链接】aws-doc-sdk-examples Welcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below. 项目地… · 2026/9/25 10:56:58
APM安全模型深度解析:提示词即程序——AI智能体上下文的终极供应链防护 APM安全模型深度解析:提示词即程序——AI智能体上下文的终极供应链防护 【免费下载链接】apm Agent Package Manager 项目地址: https://gitcode.com/gh_mirrors/apm10/apm
APM(Agent Package Manager,AI智能体包管理器)把… · 2026/9/25 10:56:52
开放式代码评审实践:让每一行代码都被认真读过 1. 开放式代码评审:让每一行代码都被认真读过先聊个场景。你花了几个小时写了一个功能,提交了合并请求,两天后评审人才姗姗来迟,留下一句“LGTM”就合入了。你心里清楚,这份代码里有几处设计瑕疵,有些边界条… · 2026/9/25 12:50:46
Atlas 300V 24G推理卡实战:YOLO模型部署与踩坑全解析 1. 先回答那个热搜问题:Atlas 300V 24G到底是不是运算加速卡1.1 从产品命名拆解硬件身份最近后台被问得最多的一条搜索词就是“atlas部署yolo”,紧跟着的就是“atlas 300v 24g 是运算加速卡吗”。我猜很多人是在二手平台或者电商页面上看到这块卡&#x… · 2026/9/25 12:50:46
7-Zip安装与高效使用指南:压缩解压底层原理与实战技巧 1. 为什么7-Zip是Windows下真正值得花5分钟装上的“隐形生产力工具”你有没有过这样的经历:双击一个.rar文件,弹出“需要购买WinRAR才能解压”的提示框,点“试用”又跳出倒计时广告;或者下载了一个几十GB的开发镜像包,… · 2026/9/25 12:50:46
Atlas 300V 24G推理加速卡部署YOLO全流程:从ONNX到OM与性能优化 1. 先把话说透:Atlas 300V 24G 是一张实打实的AI运算加速卡最近后台被同一个问题反复刷屏:"Atlas 300V 24G 是运算加速卡吗?"紧接着又来一句"那它能不能部署YOLO?怎么弄?"。我先直接给出答案&… · 2026/9/25 12:50:40
Python数据标准化实战:z-score与0-1标准化原理、代码与避坑指南 做数据处理这行,几乎每天都要跟“标准化”打交道。z-score标准化的均值是0、方差是1,0-1标准化把数据压到[0,1]区间,这两种方法在我做过的几十个机器学习项目里占了至少八成。如果你刚入门Python,搜过一堆教程却只看到代码模板、没… · 2026/9/25 12:50:40
2026年江苏生产安全体验馆定制公司排名:小柒科技靠谱之选 生产安全体验馆基础认知:什么是正规生产安全体验馆生产安全体验馆是依托数字化互动技术,针对生产型企业高危作业场景开发的专项安全教育培训载体,核心属性是把原本停留在纸面、口头的安全规范,转化为可体验、可实操的沉浸式训练场… · 2026/9/25 12:50:33
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37