数据湖技术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. 非常感谢您的观看 个人微信号 腾讯大数据 公众号

Accueil - Wiki
Copyright © 2011-2024 iteam. Current version is 2.137.1. UTC+08:00, 2024-11-18 02:22
浙ICP备14020137号-1 $Carte des visiteurs$