更改 Apache Arrow 格式规范#

跨语言兼容性在 Apache Arrow 中非常重要。为了维护这种兼容性,我们在处理格式(位于 https://github.com/apache/arrow/tree/main/format 中的文件)变更时会遵循以下流程:

  • 我们必须在公共邮件列表中讨论这些变更并进行投票。

  • 我们必须至少有两个参考实现及相关的集成测试。

上述步骤不必严格按顺序执行。在大多数情况下,拥有至少一个参考实现草案对于设计讨论是非常有帮助的。

注意

我们还必须更新相应的文档(位于 https://github.com/apache/arrow/tree/main/docs/source/format 中的文件)。

讨论和投票流程#

对格式的更改应在公共邮件列表中进行讨论。任何人都可以参与讨论。讨论应通过在 dev@arrow.apache.org 发起一个邮件主题开始,主题前缀应为 [DISCUSS]

注意

我们有时会使用 [Discuss]DISCUSS: 或类似格式,但推荐使用 [DISCUSS]

以下是一些示例:

投票流程用于确认我们已达成共识。在上述 DISCUSS 邮件列表主题中达成共识后,我们可以针对格式变更发起投票。与讨论主题类似,投票主题必须包含前缀 [VOTE]

另请参阅:Apache 投票流程

至少两个参考实现#

我们必须至少有两个参考实现及相关的集成测试,以确认格式变更是否在各语言间兼容且一致。

参考实现必须属于完整的 Arrow 实现。例如,C++ 库是可以的,但 Python 库不行,因为它只是对 C++ 库的包装。以下是候选实现:

  • C++ 实现

  • Java 实现

  • Rust (arrow-rs) 实现

  • Go 实现

我们可以讨论并投票决定将更多实现添加到此列表中。我们可以参考 实现状态 来确定哪些实现是完整的。

版本控制#

随着新变更的产生,格式版本(与库版本是分开的)也必须递增。请参阅 格式版本控制与稳定性