+− THE DAILY DIFFdev & AI news
NEEDS REVIEW

Polars 2.0:为什么连接不再保持行序

Polars 2.0 默认在流式引擎上运行 collect。

Polars 2.0 默认在流式引擎上运行 collect。对于 join、group_by 和 unpivot,除非您明确设置 maintain_order 或 sort,否则该版本不再保证输入行序。在我们对 Polars 2.0.0 的运行中,一个 2,000,000 行的内连接默认返回的行是乱序的,而在设置 maintain_order 后则保持了顺序。该版本还默认开启了核外溢出,并使基准测试声明为供应商自己的。

阅读书面版(英文) ↗

本视频涵盖的内容

  • 现在,在惰性查询上调用 collect() 默认使用流式引擎,该引擎不保证 join、group_by 和 unpivot 的行序。
  • 迁移指南指出,行序不再是 2.0 之前的顺序,并且不作保证;如果依赖于此,建议进行显式排序。
  • 在我们的运行中,默认的内连接返回的输入顺序为 False;在连接上设置 maintain_order="left_right" 后返回 True。一台机器,一次运行,一个连接形状。
  • 核外溢出默认开启:在大约 80% 的 RAM 使用量时开始溢出到磁盘,默认磁盘预算为 64 GB。核外 join 和 group_by 正在路线图上。
  • collect_schema() 在读取任何数据之前捕获缺失的列,但仅在一个值上失败的类型转换只会在 collect() 时失败。
  • TPC-H 和 TPC-DS 比较是供应商在衍生数据上进行的自有运行,其脚注指出结果不可与官方基准测试相比较。

翻译的文字记录

译自英文原版旁白。可用音频和字幕由 YouTube 控制。

为什么默认顺序改变了?

0:00 你认为连接会按照你写入的顺序返回行。 Polars 2.0 默认停止了这种承诺,这是有意的。 本视频内容:为什么默认值改变了? 它带来了什么好处? 以及你的哪些脚本会首先出问题? 这是 The Daily Diff,幕后揭秘。 Polars 是一个开源的 DataFrame 库: 一个你可以从 Python 调用的表引擎,

0:20 其核心是用 Rust 编写的。 它在 MIT 许可证下免费,你可以通过 pip install polars 安装它。 首先一个细节。 恢复旧顺序的开关是连接本身的参数。 我会在最后再回来讨论它。 从 2.0 版开始,collect 默认运行流式引擎。 流式处理将查询分成并行运行的块, 这些块在完成时就完成。

0:42 对于 join、group by 和 unpivot,该版本不承诺顺序。 谁会首先受到影响? 任何逐行比较输出与保存文件的人。 这个测试可能在你的笔记本电脑上通过,但在不同的机器上失败。 接下来是迁移指南。

迁移指南承诺了什么?

0:57 它说上面显示的精确行序不作保证。 因此,如果你依赖于顺序,请明确排序。 核外溢出也默认开启。 它在大约 80% 的 RAM 使用量时开始溢出到磁盘, 预算为 64 GB。 排序、窗口函数和许多表达式现在都可以溢出。 连接和分组即将推出。

基准测试公平吗?

1:17 Polars 声称在 TPC-H 和 TPC-DS 基准测试中击败了 DataFusion 和 DuckDB。这些数据来自他们自己在衍生数据上的运行, 他们的脚注指出这些结果不能与官方结果相比较。 他们自己的数据显示,在 TPC-H 上,Polars 从 16 核到 192 核,速度大约快了 3.8 倍。 他们还说,大型机器的额外线程会减慢小型查询。

我们运行时看到了什么?

1:41 我们在 Polars 2.0.0 上两次运行了相同的连接。 默认运行会打乱行。 带有标志时,输入顺序得以保留。 找到为测试提供数据的连接。 任何之后没有排序的连接都是你从未做出的行序决定。 Polars 2.0 对类型更加严格。

更严格意味着更早?

1:58 模式检查在读取任何数据之前捕获缺失的列。 它无法捕获在一个行上失败的类型转换,因为该错误等待 数据。现在我打开的循环。

如何恢复旧顺序?

2:08 开关位于连接上。 在连接上设置 maintain_order,或者在其后添加一个排序。 指南建议排序。 在我们的运行中,连接标志保留了顺序,左侧的顺序保留为 左、右。幕后判决:NEEDS REVIEW。

结论是什么?

2:22 我会在升级之前检查每个连接。 对此有什么疑问吗? 请在评论中提出。 这就是今天的差异。 我是 Axrisi 的 Niko。 负责任地合并。

来源

  1. Release of Polars 2.0Polars (pola.rs)
  2. Polars 2.0 upgrade guidePolars documentation
  3. Polars homepagePolars (pola.rs)
  4. polars-2.0-benchmark repositoryPolars on GitHub
  5. Release of Polars 2.0 (Hacker News discussion)Hacker News

相关视频

under-the-hood · zh-CN · 2026年9月24日

SAML 内部揭秘:信件里的签名

SAML 让你登录几乎所有工作应用,其签名存在于它签名的 XML 内部。深入探讨:应用、浏览器和身份提供商之间的登录流程,断言的样子,为什么规范化必须在每个字节上达成一致,以及为什么相同的错误类别从 2012 年到 2025 年不断重现。受 Trail of Bits 的“SAML:糟糕设计的碎片” (在 Hacker News 上获得 312 分) 启发。

3:02 ↗