开发者概览

Substrait 修改

qianmoQqianmoQ· 更新于 2026-10-02· 阅读 6 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

Substrait 是一个旨在为数据计算操作创建定义明确、跨语言规范的项目。由于它仍在积极开发中,Gluten 所需的一些计算操作目前还缺少对应的表示。同时,一些已有的表示也需要稍作修改,以满足计算需求。

在 Gluten 中,Substrait 的基础版本是 v0.23.0,其中的部分消息已 rebase 到较新的上游版本(在下方每一条目中注明)。本页记录了 Gluten 对 Substrait proto 文件所做的全部修改,以供参考。这些改动最好能上游合入 Substrait,但对于无法上游的改动,可以考虑 AdvancedExtension 之类的替代方案。

本地新增内容的编号约定。 Gluten 本地字段从 1000 开始编号,位于上游分配的范围之外,这样未来上游新增字段时就不会与它们冲突。之所以采用这一约定,是因为过去将本地字段附加到下一个可用的小编号上的做法曾导致冲突:Gluten 的 bucket_spec 最初被附加在 WriteRel 的字段 7 上,而上游 v0.98.0 后来把该编号分配给了 common。

对 algebra.proto 的修改

  • 在 FileOrFiles 中新增了 JsonReadOptions 和 TextReadOptions(devlive-community/knowforge#1584)。
  • 将连接类型 JOIN_TYPE_SEMI 改为 JOIN_TYPE_LEFT_SEMI 和 JOIN_TYPE_RIGHT_SEMI(devlive-community/knowforge#408)。
  • 新增了 WindowRel,在 WindowFunction 中新增了 column_name 和 window_type,将 WindowFunction 中的 Unbounded 改为 Unbounded_Preceding 和 Unbounded_Following,并新增了 WindowType(devlive-community/knowforge#485)。
  • 在 RelRoot 中新增了 output_schema(devlive-community/knowforge#1901)。
  • 新增了 ExpandRel(devlive-community/knowforge#1361)。
  • 新增了 GenerateRel(devlive-community/knowforge#574)。
  • 在 LocalFiles 中新增了 PartitionColumn(devlive-community/knowforge#2405)。
  • 新增了 WriteRel(devlive-community/knowforge#3690)。
  • 新增了 TopNRel(devlive-community/knowforge#5409)。
  • 在窗口边界 Preceding 和 Following 中新增了 ref 字段(devlive-community/knowforge#5626)。
  • 在 WriteRel 中新增了 BucketSpec 字段(devlive-community/knowforge#8386)。
  • 在 ReadRel 中新增了 StreamKafka(devlive-community/knowforge#8321)。
  • 将 WriteRel 的内容 rebase 到上游 v0.98.0:字段 7 现在是 common,新增了 create_mode(8)和 advanced_extension(9),并将 OutputMode 的取值 OUTPUT_MODE_MODIFIED_TUPLES 重命名为 OUTPUT_MODE_MODIFIED_RECORDS。Gluten 的 BucketSpec 字段从字段 7 移到了 1000。外层的 Rel.write oneof 标签目前仍保留为 18;将整个 Rel oneof 统一到上游的编号属于另一项独立改动。请注意,Gluten 将其写入器配置附加在 named_table.advanced_extension 上,而不是附加在新的顶层 WriteRel.advanced_extension 上,因为没有任何 Gluten 代码读取后者。WriteRel.common 使用的是 Gluten 在 0.98 之前的 RelCommon 副本(缺少 rel_anchor、Hint.alias、Hint.output_names 以及 saved/loaded 计算相关消息),因此无法携带完整的 0.98 common 载荷。

对 type.proto 的修改

评论

登录后参与评论

正在加载评论…