Hudi写操作

适用于版本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_KEYto“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对象到归档文件夹。

参考资料