Databricks:Z 顺序与分区

pat*_*ski 7 partitioning z-order apache-spark databricks delta-lake

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

Ale*_*Ott 26

分区以物理方式将数据拆分到仅具有一个特定值的不同文件/目录中,而 ZOrder 提供文件内相关数据的聚类,这些文件可能包含给定列的多个可能值。

当您的基数列较低时,分区很有用 - 当没有那么多不同的可能值时 - 例如,您可以轻松地按年和月(也许按天)分区,但如果您另外按小时分区,那么您'太多的分区和太多的文件,会导致很大的性能问题。

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

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

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

您可以在以下博客文章中了解数据跳过和 ZOrder 。