MAPREDUCE服务 MRS-Hudi表模型设计规范:规则
规则
- Hudi表必须设置合理的主键。
Hudi表提供了数据更新和幂等写入能力,该能力要求Hudi表必须设置主键,主键设置不合理会导致数据重复。主键可以为单一主键也可以为复合主键,两种主键类型均要求主键不能有null值和空值,可以参考以下示例设置主键:
SparkSQL:
-- 通过primaryKey指定主键,如果是复合主键需要用逗号分隔。 create table hudi_table ( id1 int, id2 int, name string, price double ) using hudi options ( primaryKey = 'id1,id2', preCombineField = 'price' );
SparkDatasource:
--通过hoodie.datasource.write.recordkey.field指定主键。 df.write.format("hudi"). option("hoodie.datasource.write.table.type", COPY_ON_WRITE). option("hoodie.datasource.write.precombine.field", "price"). option("hoodie.datasource.write.recordkey.field", "id1,id2").
FlinkSQL:
--通过hoodie.datasource.write.recordkey.field指定主键。 create table hudi_table( id1 int, id2 int, name string, price double ) partitioned by (name) with ( 'connector' = 'hudi', 'hoodie.datasource.write.recordkey.field' = 'id1,id2', 'write.precombine.field' = 'price')
- Hudi表必须配置precombine字段。
在数据同步过程中不可避免会出现数据重复写入、数据乱序问题,例如:异常数据恢复、写入程序异常重启等场景。通过设置合理precombine字段值可以保证数据的准确性,老数据不会覆盖新数据,也就是幂等写入能力。该字段可用选择的类型包括:业务表中更新时间戳、数据库的提交时间戳等。precombine字段不能有null值和空值,可以参考以下示例设置precombine字段:
SparkSQL:
--通过preCombineField指定precombine字段。 create table hudi_table ( id1 int, id2 int, name string, price double ) using hudi options ( primaryKey = 'id1,id2', preCombineField = 'price' );
SparkDatasource:
--通过hoodie.datasource.write.precombine.field指定precombine字段。 df.write.format("hudi"). option("hoodie.datasource.write.table.type", COPY_ON_WRITE). option("hoodie.datasource.write.precombine.field", "price"). option("hoodie.datasource.write.recordkey.field", "id1,id2").
Flink:
--通过write.precombine.field指定precombine字段。 create table hudi_table( id1 int, id2 int, name string, price double ) partitioned by (name) with ( 'connector' = 'hudi', 'hoodie.datasource.write.recordkey.field' = 'id1,id2', 'write.precombine.field' = 'price')
- 流式计算采用MOR表。
流式计算为低时延的实时计算,需要高性能的流式读写能力,在Hudi表中存在的MOR和COW两种模型中,MOR表的流式读写性能相对较好,因此在流式计算场景下采用MOR表模型。关于MOR表在读写性能的对比关系如下:
对比维度
MOR表
COW表
流式写
高
低
流式读
高
低
批量写
高
低
批量读
低
高
- 实时入湖,表模型采用MOR表。
- Hudi表名以及列名采用小写字母。
- ModelArts模型训练_模型训练简介_如何训练模型
- 华为云CodeArts API_如何在CodeArts API中设置API的设计规范?
- MapReduce服务_什么是Loader_如何使用Loader
- MapReduce服务_什么是MapReduce服务_什么是HBase
- 华为云CodeArts API_APIFirst_API设计_API设计规范_API全生命周期
- MapReduce服务_什么是ClickHouse_如何使用ClickHouse
- GaussDB数据库模型_GaussDB是什么_高斯数据库模型
- MapReduce服务_如何使用MapReduce服务_MRS集群客户端安装与使用
- MapReduce服务_什么是HDFS_HDFS特性
- MapReduce服务_什么是Hue_如何使用Hue