更新时间:2024-07-24 GMT+08:00

INSERT INTO

命令功能

INSERT命令用于将SELECT查询结果加载到Hudi表中。

命令格式

INSERT INTO tableIndentifier select query;

参数描述

表1 INSERT INTO参数

参数

描述

tableIndentifier

需要执行INSERT命令的Hudi表的名称。

select query

查询语句。

注意事项

  • 写入模式:Hudi对于设置了主键的表支持三种写入模式,用户可以设置参数hoodie.sql.insert.mode来指定Insert模式,默认为upsert。
    • strict模式,Insert语句将保留COW表的主键唯一性约束,不允许重复记录。如果在插入过程中已经存在记录,则会为COW表执行HoodieDuplicateKeyException;对于MOR表,该模式与upsert模式行为一致。
    • non-strict模式,对主键表采用insert处理。
    • upsert模式,对于主键表的重复值进行更新操作。
  • 在执行spark-sql时,用户可以设置“hoodie.sql.bulk.insert.enable = true”和“hoodie.sql.insert.mode = non-strict”来开启bulk insert作为Insert语句的写入方式。

    也可以通过直接设置hoodie.datasource.write.operation的方式控制insert语句的写入方式,包括bulk_insert、insert、upsert。使用这种方式控制hoodie写入,需要注意执行完SQL后,必须执行reset hoodie.datasource.write.operation;重置Hudi的写入方式,否则该参数会影响其他SQL的执行。

示例

insert into h0 select 1, 'a1', 20;

-- insert static partition
insert into h_p0 partition(dt = '2021-01-02') select 1, 'a1';

-- insert dynamic partition
insert into h_p0 select 1, 'a1', dt;

-- insert dynamic partition
insert into h_p1 select 1 as id, 'a1', '2021-01-03' as dt, '19' as hh;

-- insert overwrite table
insert overwrite table h0 select 1, 'a1', 20;

-- insert overwrite table with static partition
insert overwrite h_p0 partition(dt = '2021-01-02') select 1, 'a1';

-- insert overwrite table with dynamic partition
insert overwrite table h_p1 select 2 as id, 'a2', '2021-01-03' as dt, '19' as hh;

系统响应

可在driver日志中查看命令运行成功或失败。