Databricks:Z-order 与 partitionBy

Databricks: Z-order vs partitionBy

我正在学习 Databricks,我对 z-order 和 partitionBy 有一些疑问。当我阅读这两个功能时,它听起来非常相似。这两个函数都以某种方式对数据进行分组,以加速读取操作。看起来 partitionBy 也很适合连接操作,但我真的不明白当我只想读取数据时我应该使用什么函数。你能告诉我应该如何考虑这两个函数才能正确使用它吗?

分区在物理上将数据分成不同的files/directories,只有一个特定值,而 ZOrder 提供文件内相关数据的集群,这些文件可能包含给定列的多个可能值。

当你有一个低基数列时分区很有用 - 当没有那么多不同的可能值时 - 例如,你可以很容易地按年和月(可能按天)分区,但如果你另外分区小时,那么你的分区太多,文件太多,这会导致很大的性能问题。

ZOrder 允许创建更大的文件,与许多小文件相比,这些文件的读取效率更高。

但是您可以将分区与 ZOrder 结合使用 - 例如按 year/month 分区和按天 ZOrder - 这将允许将同一天的数据彼此靠近并置,并且您可以更快地访问它们(因为你读取的文件少了)。

除了 ZOrder,您还可以使用 data skipping 来有效地过滤掉不包含您查询所需数据的文件。

您可以在 following blog post 中阅读有关数据跳过和 ZOrder 的信息。