Trino 应用 Iceberg Catalog 写入数据原理分析
Trino 在 Iceberg Catalog 下创建表后(https://xie.infoq.cn/article/e4c245a0e260d1ebf0b29c592),再
来分析 trino 写入 Iceberg 的过程,写入过程分为三个阶段:获取表,写入数据文件,提交元数据。
trino insert 数据的执行计划:
数据写入的执行过程有三个 stage,Fragment2 是待写入数据集处理器 ValuesOperator,Fragment1 是生成数据文件的阶段,使用 TableWriterOperator 将数据写到存储系统上,并统计数据信息,传递给 Fragment0,Fragment0 是最后提交写入数据的元数据文件,使用 TableFinishOperator 完成提交事务。
关键流程:
获取表流程
获取表的过程最重要的一步是从存储系统中刷新最新版本的元数据文件和快照。
关键代码:
写入数据文件
trino 写入数据文件没有使用 Iceberg 的相关接口,比如 Parquet 和 Orc 模块。trino 自己都有相应实现 ParquetWriter 和 OrcWriter。
写入流程:
除了将数据写入,还需要返回数据的统计信息,比如 Max/Min/nonNull,作为 TableWriterOperator 的输出数据,传递给下个阶段。
提交元数据文件
Trino 的写入过程同样没有采用 Iceberg 的 HadoopTableOperation 和 HiveTableOperation,采用自己实现的 HiveTableOperation 完成最后的事务提交。Trino 的数据写入过程跟 Iceberg 的过程相同,主要三个步骤:
引用相关 Iceberg 接口和方法
TableMetadataParser.read()读取当前 iceberg 表的元信息
BaseTable.currentSnapshot()返回当前数据最新版本号
BaseTransaction.newFastAppend() 创建 FastAppend
FastAppend.commit()创建数据文件对应的元数据描述文件
TableMetadataParser.write()写入新版本元数据 json 文件
版权声明: 本文为 InfoQ 作者【漫长的白日梦】的原创文章。
原文链接:【http://xie.infoq.cn/article/7ca08aea8ae6281091fa01216】。文章转载请联系作者。
评论