1、SPARK读写ICEBERG在腾讯的实践和优化刘献杨 腾讯 高级工程师|01Apache Iceberg 介绍介绍02Spark读写读写Iceberg03Iceberg 生产实践生产实践04数据治理服务数据治理服务目录目录CONTENT|ApacheIceberg介绍01|Apache Iceberg 表格式(Table Format)|Iceberg table format that is designed to manage a large,slow-changing collection of files in a distributed file system or key-valu
2、e store as a table.ACIDScaleEvaluationStorage separationIceberg 表|Catalog:HiveCatalog,HadoopCatalog,JDBCCatalog等。Catalog 的具体实现需要提供原子性能力,可以根据需要实现SupportNamespace接口TableMetadata:对表的更新会生成新的TableMetadataSnapshot(ManifestList):对表的数据更新会生成新的SnapshotManifestFile:DataFile的集合,Min-Max信息用于文件过滤DataFile/DeleteFil
3、e:存储在分布式文件系统的文件Iceberg 表 ACID|S nS n+1S n-1CatalogIceberg Evaluation|Schema Evaluation可以并发的修改表的Schema,如增加/删除/修改列。Partition Evaluation/建表,partition是基于列transform得到的CREATE TABLE iceberg.db.table(id BIGINT,created_t TIMESTAMP)USING iceberg PARTITIONED BY(months(created_t);/写入的数据只需要有表的列,不需要加上partition列IN
4、SERT INTO TABLE iceberg.db.table VALUES;/可以更新表的partitionALTER TABLE iceberg.db.table ADD PARTITION FIELD days(created_t);/更新后不需要改变写入数据的格式INSERT INTO TABLE iceberg.db.table VALUES;Spark读写Iceberg02|Spark 写 Iceberg 表|Input SourceDataFileDataFileInput SourceInput SourceDataFileDataFileWriteTaskDataFileD
5、ataFileDFDFDFDFMFMFMFLInputWriteCommitWriteTaskWriteTaskSpark 读 Iceberg 表|Plan TaskExecute TaskMLFMFMFMF DF DF DF DF DF 1.根据Partition Summary过滤2.根据Partition Value以及Metrics过滤12DataFileDataFileProjectRead TaskDataFileDataFileProjectRead TaskDataFileDataFileProjectRead TaskIceberg 文件过滤|/创建表,当前表的partiti
6、on spec ID为0CREATE TABLE iceberg.db.table(id BIGINT,created_t TIMESTAMP)USING iceberg PARTITIONED BY(months(created_t);/写入数据,DataFile中记录文件的partition spec ID为0INSERT INTO TABLE iceberg.db.table VALUES;/更新表的partition,当前表的partition spec ID 为1ALTER TABLE iceberg.db.table ADD PARTITION FIELD days(created