Databricks(Spark SQL)表的索引

5

想了解在Databricks中索引的工作原理。你可以把分区看作是索引,因为它会有效地将数据组织成分组的子类别吗?

2个回答

6

是的,分区可以看作是一种索引 - 它允许您直接跳转到必要的数据而不必读取整个数据集。

对于Databricks Delta,还有另一个功能 - 数据跳过。在将数据写入Delta时,编写器会收集统计信息(例如,最小值和最大值)用于前N列(默认为32),并将该统计信息写入Delta日志中,因此当我们通过索引列过滤数据时,我们知道给定的文件是否可能包含给定的数据或不包含。Databricks Delta的另一种索引技术是布隆过滤,它显示特定值是否绝对不在文件中,或者可能在文件中。

更新于2022年4月14日:数据跳过也适用于OSS Delta,从版本1.2.0开始可用。


1
这是一个我非常感兴趣的话题。如果我将问题中的“索引”一词扩展为关系型的“非聚集索引”,那么这就是索引的定义:
A. 一个与我们正在搜索的实际数据分离的数据结构(类似于布隆过滤器索引)
B. 查询规划器自动透明地使用它(类似于布隆过滤器索引)
C. 非聚集索引的叶子边缘指向我们正在搜索的数据中的特定行
据我所了解,Databricks 不支持 C 这一点,因为在数据集中没有绝对的行标识符的概念。这很好,因为它通过不需要定义和维护这个标识符而获得了各种性能和维护方面的改进。
看起来,所有的 Databricks 性能对象都专注于数据跳过(在数据库世界中称为修剪)。换句话说,它们不支持查找特定的数据行,而是支持忽略没有所需数据的数据(文件)。
  • 分区和Z-order都专注于将已知属性放入已知文件中,以便我们知道要忽略哪些文件

  • 布隆过滤器(如上所述),再次是一种了解哪些文件可以忽略,哪些文件可能包含我们需要的数据的方法

  • clusterby...这个我在寻找关于Spark如何利用它的背景时遇到了困难,但我认为这样可以让我们知道文件中的数据范围,从而知道要忽略哪些文件

编辑:时间不停流逝:databricks的最新性能功能是liquid clustering,似乎涵盖了上述提到的所有功能


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接