更新时间:2025-07-03 GMT+08:00
分享

确定写入方式

写入方式介绍

写入方式

支持的表类型

功能介绍

使用介绍

优选场景

insert into

cow/mor

insert into写入的数据将会按主键去更新表内的存量数据。

  • insert into SinkTable values()
  • insert into SinkTable select * from SourceTable

多源表关联查询后的结果写Hudi表。

insert overwrite

cow/mor

  • 对于分区表,仅会覆盖写入数据所对应的分区。
  • 对于无分区表,整表覆盖。
  • insert overwrite SinkTable values()
  • insert overwrite SinkTable select * from SourceTable

cow表,分区覆盖。

insert overwrite table

cow/mor

可以整表覆盖,也可以分区覆盖。

  • insert overwrite table SinkTable values()
  • insert overwrite table SinkTable select * from SourceTable
  • insert overwrite table SinkTable partition (分区字段=分区值) values()
  • insert overwrite table SinkTable partition (分区字段=分区值) select * from SourceTabl

整表覆盖。

bulk_insert

cow/mor

  • 给insert into设置bulk_insert方式写入,Hudi表可借助此方式完成快速初始化。
  • bulk_insert在迁移存量过程中只能使用一次,而且不去重

参考常用参数介绍及使用场景

Hudi表初始化。

update

cow/mor

批量更新列。

  • update SinkTable set 字段名=值 where 字段名=值

批量地对某一列的值进行更新。

merge into

cow/mor

一条语句完成update/insert/delete多种写入。

  • merge into SinkTable as t1 using (子查询) as t2 on t1.字段 = t2.字段 when matched then

不推荐,社区的merge into功能弱,限制多,用法复杂。

delete

cow/mor

小批量删除数据。

  • delete from SinkTable where 字段名=值
  • delete from SinkTable where 字段名 in (子查询)

小批量删除数据,如删除表中30%以下的数据。

注意事项

  • delete不用来删除分区,删除分区请用drop partition命令,具体请参考常用SQL介绍
  • 对于bucket索引,写入任务可能会遇到重复Bucket ID的报错“Find multiple files at partition xxx belongs to the same bucket id = xxx”。

    常见的报错场景:

    1. insert into作业与truncate冲突,truncate正在重新初始化Hudi表,但是insert into作业此时正在写文件,导致重新初始化出来的hudi表里残留上一次insert into作业的文件。
    2. insert overwrite作业切换为insert into作业,insert overwrite作业写Hudi时clean和archive的配置必须按照选择合适的表服务执行方式的指导正确去使用,否则insert overwrite作业的replacecommit元数据已经被归档,但是数据文件还在。

相关文档