使用必读-使用Iceberg数据湖需要注意的点
一、开发注意事项
1、Iceberg选择合适的表版本
简述:Iceberg目前有两个表版本(V1和V2),根据数据选择合适的表版本。
V1表只支持增量数据插入,适合做纯增量写入场景,如埋点数据。
V2表才支持行级更新,适合做状态变化的更新,如订单表同步。
使用方式:建表语句时指定版本'format-version'
=
'2'
,默认使用V1
2、Oceanus自动建表
简述:使用Oceanus时编写建表语句,Oceanus在第一次运行任务时会自动建表。不需要登录数据库手动建表。
3、建表类型转换问题
简述:mysql表create_time大多为timestamp类型,同步到iceberg后使用spark查询会报timezone错误。
原因:源表没有timezone, 下游表需要设置local timezone
使用方式:建iceberg表时指定字段类型为TIMESTAMP_LTZ类型
4、任务全量同步和增量同步
简述:全量同步阶段需要速度快,可以把flink checkpoint设置为1分钟,并发可以调高(比如1CU*10)这样可以快速同步数据。同时要考虑你的数据源能支持多快抽取,否则dba会找你。
增量阶段一般数据量比较低了,全量同步完后可以先把任务停止一下(注意保存checkpoint),然后调小资源和并发(比如0.5CU*1)可以节省资源。mysql增量阶段只能单线程跑,设置并发多也没用。
5、删表(spark方式删表)
简述:和hive删表不一样,iceberg默认只删除元数据不清理hdfs文件,删表语句后面需要加purge关键字。原本路径不会删除,腾讯特殊改造过包
使用方式:drop table data_lake_ods.test1 purge;
二、任务运维注意事项
1、小文件合并
简述:全量同步后因为每分钟一次checkpoint会生成大量的小文件,全量同步结束后需要做一下小文件合并,提高查询速度。
使用方式参考:Iceberg小文件合并测试
2、过期快照清理
简述:全量同步后因为每分钟一次checkpoint会产生大量快照,全量同步结束后需要做一下快照清理,提高查询速度。
使用方式参考:Iceberg过期快照清理
三、查询注意事项
1、presto查询iceberg表
简述:腾讯DLC那边做了改造支持查询V2表。自建emr的presto(旧集群)已支持查询v1版本表,因版本问题不支持v2表。