适用于版本0.10.1。
1 操作类型
(1) Upsert
插入或更新查找索引时的默认操作。记录将在heuristics后决定打包存储的方式以优化,如文件大小。保证目标表去重。
(2) Insert
与upsert的区别是没有查找索引的步骤,不保证去重,因此更快。
(3) Bulk_insert
upsert和insert通过夹在数据到内存中来加速storage heuristics computation。不适用于初始化或第一次加载表。bulk insert实现了基于排序的写数据短打,可以应对上百TB数据加载。但在文件保证文件大小上不如前两者。
(4) Delete
软删除
保留键值,其他字段置为null。
硬删除
物理删除所有字段。
可通过以下不同方式实现:
- 使用数据源,设置OPERATION_OPT_KEY为DELETE_OPERATION_OPT_VAL,将删除提交的记录。
- 使用数据源,设置AYLOAD_CLASS_OPT_KEY
to
“org.apache.hudi.EmptyHoodieRecordPayload”,将删除提交的记录。 - 使用数据源或DeltaStreamer,添加_hoodie_is_deleted列并设置为true。
2 写路径
以下为写入操作的步骤:
(1) Deduping
消除重复记录
(2) Index Lookup
查找索引以匹配文件组
(3) File Sizing
基于前期提交大小,尽量将文件大小控制到配置上限。
(4) Partitioning
决定文件组
(5) Write I/O
实际写入
(6) Update Index
更新索引
(7) Commit
原子提交
注意:A callback notification is exposed
(8) Clean (if needed)
清理
(9) Compaction
如果使用MOR表
(10) Archive
移动旧的timeline对象到归档文件夹。