数据湖技术iceberg查询优化实践
如果无法正常显示,请先停止浏览器的去广告插件。
1. 数据湖技术ICEBERG
查询优化实践
陈梁 高级工程师
2. 目录 CONTENT
01 Iceberg简介 03 查询优化
02 数据入湖 04 后续规划
3. 01
Iceberg简介
4. Iceberg架构
Apache Iceberg is an open table format for huge analytic datasets. Iceberg
adds tables to compute engines including Spark, Trino, PrestoDB, Flink and Hive using a
high-performance table format that works just like a SQL table.
5. Iceberg查询
SELECT * from db1.table1 执行流程
6. Iceberg Hidden Partitioning
SELECT * FROM table1 WHERE order_ts = DATE '2021-01-26'
partitioned by
(hour(order_ts))
7. Iceberg Time Travel
rollback_to_snapshot or set_current_snapshot
SELECT * FROM table1
8. Iceberg Major Feature
基于快照的读写分离和回溯
流批统一的写入和读取
表 schema和分区演进
不强绑定计算和存储引擎
ACID语义等
9. 02
数据入湖
10. 构建实时Data Pipeline
…
Flink CDC数据流入
11. 近实时流批统一
Streaming Read
LOG
DataSource
Batch Query
12. DLA数据入湖
实时:Flink/Spark + iceberg
存量:Spark batch 任务将Hive表迁移Iceberg表
13. 03
查询优化
14. 优化手段
数据治理服务
•
•
•
小文件合并
快照清理
孤儿文件清理
数据组织优化
•
•
•
Bin-Packing
Sort
Z-Ordering
15. 数据治理服务
16. 数据治理服务
17. 数据组织优化
Bin-Packing 根据targeSize大小直接合并,是小文件合并的默认策略
适用场景:合并小文件
Sort 按照固定列排序重写
适用场景:散列度较高的列进行排序,使得文件级别和Page级别的min-
max范围更小,有助于高效的数据过滤,对于单个列的Data Skipping效
果较好,可用于单条件查询
Z-Ordering 利用Z-Order的空间曲线填充算法重写
适用场景:多个字段均能取得较好的Data Skipping效果,可用于多条件
查询
18. 数据组织优化-Z-Ordering
• 蓝色代表X轴,红色代表Y轴
• 将x,y的index换成二进制,然后交叉
(xyxy…)的方式结合成z-value
• 所有的点按照z字形连起来,z-value 范
围 [0, 63]顺序递增
• 某个点附近的数据具有公共前缀
按照z-value的顺序对数据进行排序,平均分配到4个文件,使用x或者y字段查询,
结合iceberg的min/max索引,可以skip一半的文件
19. 数据组织优化-Z-Ordering
条件筛选待
Optimize的数据
提取Zorder相
关的列名
每个column的数据进行数
字化,采样计算ranger-id
多列ranger-id生成
交错位z-value
OPTIMIZE TABLE TB ZORDER BY c2, c3;
Repartition by
z-value
20. 数据组织优化-Z-Ordering
SQL Extension扩展实现
OPTIMIZE TABLE tableName WHERE c1 = "1" and c2 = "foo" ZORDER
BY c2, c3 OPTIONS("'target-file-size' = '500000000'");
API 扩展实现
SparkActions.get(spark)
.rewriteDataFiles(table)
.filter(Expressions.equal("c1",1)) .
.filter(Expressions.equal("c2","foo"))
.zorder("c1,c2")
.option(RewriteDataFiles.TARGET_FILE_SIZE_BYTES,‘500000000’)
.execute()
支持按照条件增量Optimize,支持V2 Format
21. 数据组织优化-Z-Ordering
利用SSB构造数据集性能测试
Catagary
Rows
Scale-100 600038145
Size
Files
61.3G 10000
CREATE TABLE lo_iceberg_10000
USING iceberg
AS SELECT * FROM lineorder
JOIN dates ON lo_orderdate =
d_datekey
JOIN customer ON lo_custkey =
c_custkey
JOIN supplier ON lo_suppkey =
s_suppkey
JOIN part ON lo_partkey = p_partkey
DISTRIBUTE BY random();
22. 数据组织优化-Z-Ordering
Direct Query
OPTIMIZE TABLE johnlchen_100_ssb.lo_iceberg_10000 BINPACK;
OPTIMIZE TABLE johnlchen_100_ssb.lo_iceberg_10000 ZORDER BY
c_region,s_region,d_year;
23. 数据组织优化-Z-Ordering
Z-Ordering能够取得很好的Data
Skipping效果,SSB测试集来看,
Q3.1,Q3.2,Q3.2, Q3.4 均能
有效过滤80%以上的无效数据
24. 04
后续规划
25. 内核
•
•
•
•
•
索引支持,Bloom filter
Alluxio加速层支持
SQL Extension增强
更多空间填充曲线支持Data
Clusterging,比如Hilbert
Read/Write metrics 完善
平台
•
•
构建在线查询平台,
zeppelin服务
优化AutoOptimizer规则,
元数据管理等
26. 非常感谢您的观看
个人微信号
腾讯大数据 公众号