【数据湖Hudi的概念】Write Operation类型和Schema Evolution

1. Write Operation类型

类型如下:

  1. upsert(默认):先查找索引,然后再进行insert或update
  2. insert:不查找索引,直接insert
  3. bulk_insert:对于表初始化时,进行几百TB数据的insert。数据insert时会进行排序
  4. delete
    1. Soft Deletes:删除一条数据的时候,保留数据,但将其它字段设置为null
    2. Hard Deletes:进行physically remove,由3种实现方式:
      1. 通过DataSource:设置OPERATION_OPT_KEY为DELETE_OPERATION_OPT_VAL,对submit的dataset进行删除
      2. 通过DataSource:设置PAYLOAD_CLASS_OPT_KEY为"org.apache.hudi.EmptyHoodieRecordPayload",对submit的dataset进行删除
      3. 通过DataSource或DeltaStreamer:向dataset添加一列_hoodie_is_deleted,值为true表示delete,值为false或null表示upsert

write的流程:

  1. Index Lookup:看record属于哪个file group
  2. Partitioning:决定update / insert哪些file group,或创建哪些file group
  3. Write I/O:创建新的base file,或append到log file
  4. Update Index
  5. Commit:进行原子性的commit,如果失败则rollback
  6. Clean(if needed)
  7. Compaction:如果是MOR类型的表, 同步或异步的进行compaction
  8. Archive:将timeline中老的移动到archive文件夹

2. Schema Evolution

下表是schema changes对不同Hudi表的兼容情况

Schema ChangeCOWMORRemarks
添加一个nullable列到schema的最后YesYes
添加一个nullable列到struct类型字段的最后YesYes
Add a new complex type field with default (map and array)YesYes
添加一个nullable的Hudi meta column,比如:_hoodie_meta_colYesYes
将root level字段的类型从int升到longYesYes还支持其它类型提升:int => long、float、double,long => float、double,float => double,string => bytes,bytes => string
将嵌套类型字段的子字段从int升到longYesYes
Promote datatype from int to long for a complex type (value of map or array)YesYes
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值