【数据湖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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hudi(Hadoop Upsert Delete and Incremental)是一个构建在Hadoop上的开源数据湖架构,它提供了类似于数据库的upsert、delete、incremental等操作,同时支持流处理和批处理。Hudi与Flink的集成可以实现数据湖的实时计算和增量处理。 在Hudi和Flink的集成案例中,我们可以使用Flink作为流处理引擎,实现实时数据的读取和写入。具体步骤如下: 首先,我们需要将输入数据源和输出数据源与Flink进行集成。Flink可以读取来自不同数据源的数据,例如Kafka、Hive、HBase等。在我们的案例中,我们需要将Hudi作为输出数据源,因此需要实现一个自定义的Flink Sink函数,用于将Flink的输出数据写入Hudi。 其次,我们需要在Flink中编写业务逻辑,用于对输入数据进行实时计算和增量处理。Flink提供了丰富的API和算子,可以方便地进行数据转换、聚合、过滤等操作。在我们的案例中,我们可以使用Flink的Map和Filter算子,对输入数据进行转换和筛选,然后将结果数据写入Hudi。 最后,我们需要在Flink中配置和管理Hudi的相关参数。Hudi需要使用一些配置信息,例如数据存储路径、数据表的主键、分区字段等。我们可以通过Flink的配置文件或命令行参数,将这些配置信息传递给Hudi。 通过以上步骤,我们可以实现Hudi和Flink的集成。当输入数据流进入Flink时,Flink可以对数据进行实时计算和增量处理,并将结果数据写入Hudi。这样就可以实现对数据湖中的数据进行实时查询和分析。 通过Hudi和Flink的集成,我们可以充分发挥两者的优势,实现高效、实时的数据处理和分析。使用Hudi可以保证数据湖的数据一致性和可更新性,而使用Flink可以实现实时计算和增量处理。这样的集成方案可以在企业中广泛应用,为数据团队提供更好的数据湖架构解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值