1、DataFunSummitDataFunSummit#20252025Iceberg行级更新在B站的创新与实践 张明磊哔哩哔哩资深开发工程师Contents从交互式分析到多场景探索的技术演进行级更新的业务背景新技术的设计与思考业务落地与实践效果未来规划从交互式分析到多场景探索的技术演进2021年Q2Z-order 支持2021年Q2观远报表2021年Q3取数服务2021年Q4索引支持2021年Q4预计算2022年Q1,Q4智能数据管理平台2023年Q1,2日志数据入湖2024年Q1,2公司级埋点入湖2024年Q3行级更新2025年Q1数仓宽表治理2023年Q3 CDC 入湖2021年Q1OLA
2、P团队成立2024年Q4广告商业化行级更新的业务背景如下网页被打开时会产生2种类型的数据,曝光和可能存在的点击行级更新的业务背景转化数据(付费)需在离线进行关联到对应的曝光、点击表。更新Label场景产出任务Flink双流Join曝光和点击的数据输出到target表,窗口大小分钟级别,天数据量十亿级别,大小十TB级别。小时级Spark 离线任务关联曝光、点击数据,再insert overwrite target表实现更新Label的业务需求。耗时久insert overwrite 需要刷表或者分区特征调研场景产出任务调研新特征是否可以提升模型效果,通常涉及90-180天的样本。基础表left
3、join新特征insert overwrite到一张新的表进行离线训练新模型并评估指标。创建新表-冗余存储insert overwrite 需要刷表或者分区资源受限-作业耗时久,有时会失败原生方案在上述业务场景中存在的问题Copy on WriteMerge on Read大宽表更新少数列,大部分没有被更新的列仍然需要在新的DataFile中被重复记录一次。不管是COW还是MOR都存在较严重的写放大问题。写不友好写不友好 原生方案在上述业务场景中存在的问题影响主表上的写入和读取Branch没有独立的schema新方案的技术设计与思考 需要有一种新型的行级更新技术,该技术需要具备可接受的写入放大
4、和读取损失,且具有一定的易用性和通用性。支持Branch级别的Schema。ColumnFile设计DataFileColumnFileupdate f2=new valuesupdate f3=new valuesColumnFile元数据路径文件大小记录行数添加的Snapshot IDSequence Number列的idColumnFile生成Optimized Logical Plan based on Apache Spark 3.1/4.0Projection Push Down to DataSourceV2RelationPush Down Runtime Filter to
5、WriterMetadata Columns _file,_posColumnFile WriterMERGE INTO prod.db.target tUSING(SELECT.)sON t.id=s.idWHEN MATCHED AND conditions THEN UPDATE SET conv_type=udf(s.conv_type,t.conv_type),status=s.status,update_time=CURRENT_TIMESTAMP,description=COALESCE(s.description,t.description),amount=CASE WHEN
6、s.amount IS NOT NULL THEN s.amount ELSE t.amount END,category=IF(s.category IS NOT NULL,s.category,t.category),flag=s.flag OR t.flag Join condition Match condition Update Assignments Partition Fields无DeleteFile场景的ColumnFile读取posbc1eatapple2drinkwatercpigoilposbc1eatpig2drinkoilDataFileColumnFilemerg