type
status
date
slug
summary
tags
category
icon
password
Delta Lake 3.0里介绍了一种新的数据排列方式————Liquid,声明比 zorder 方式有 2.5 倍的性能提升,不过现在还没有放出具体的代码和原理,因此我们还没办法了解其为什么能如此有效。
Zorder信息构建
将数据的每个字段映射成一段二进制,交替拼接得到最终的结果。
例如:
其中有一条数据[3, 2], 做以下映射
对于string这类变长数据如何映射不在这里介绍,但是总要确定一个映射的二进制数据。
作用:
做zorder映射的本质是使得多维数据在存储上尽可能靠拢。
数据文件过滤
查询语句
可以看到矩阵区域是12~45。
再次注意,矩阵区域是12~45。
1)先找到12,然后依次搜索找到12、13、14、15,都符合条件。
2)找到16、17、18,发现都不符合条件(累积达到3次),这里我们希望不要继续依次寻找了,快速找到36。
如何搜索?
2.1 横向二分,分成上半部分区域[12~15],下半部分区域[36~45]。19 < 36,所以选定36作为新的起点。
3)同样的,继续找到36、37、38、39,都符合条件。
4)找到40、41、42,发现都不符合条件(累积达到3次),搜索下一个起点。
4.1 横向二分,上部分区域[36~37],下部分区域[38~45],38 < 43 < 45,需要再搜索下半部分区域。
4.2 竖向二分, 左部分区域[38~44], 右部分区域[39~45], 38 < 43 < 44,需要再搜索左半部分区域。
4.3 横向二分,上部分区域[38],下部分区域[44],43 < 44,确定搜索起点是44。
5)继续找到44、45,找完所有文件。
作用:
多维度二分。
总结
zorder的作用是使得具有相似特性的数据尽可能靠拢。
在选定起点之后,顺序找到后续的节点,对于不可能存在的区域,通过二分快速找到下一个搜索起点。