hudi支持多种数据写入方式:insert、bulk_insert、upsert、boostrap,我们可以根据数据本身属性(append-only或upsert)来选择insert和upsert方式,同时也支持对历史数据的高效同步并嫁接到实时流程。
这里的使用技术组合为flink + hudi-0.11
upsert
这是hudi默认的写入方式,是包含了INSERT和UPDATE两种操作,如何区分两种操作?在数据写入之前会进行一个"tag"过程,即通过查找索引来确定记录的位置,如果是UPDATE操作,那么我们会得到记录的旧位置,否则将会为INSERT的记录分配一个新位置,"相同"的记录被组织在一起,还能进行小文件方面的优化。这种写入方式适合数据会更新(不会重复)而且需要保留变更数据的场景(Changelog Mode),结合flink进行近实时流式计算。
insert
单纯的插入操作,由于不需要判断记录是否属于更新,因此省略了"tag"过程,速度会比upsert快得多,但是不能保证数据是去重的,对于append-only的数据(日志、行为)很适合使用这种方式