INSERT INTO
命令功能
INSERT命令用于将SELECT查询结果加载到Hudi表中。
命令格式
INSERT INTO tableIndentifier select query;
参数描述
参数 |
描述 |
---|---|
tableIndentifier |
需要执行INSERT命令的Hudi表的名称。 |
select query |
查询语句。 |
注意事项
- 写入模式:Hudi对于设置了主键的表支持三种写入模式,用户可以设置参数hoodie.sql.insert.mode来指定Insert模式,默认为upsert。
hoodie.sql.insert.mode = upsert
- strict模式,Insert 语句将保留 COW 表的主键唯一性约束,不允许重复记录。如果在插入过程中已经存在记录,则会为COW表执行 HoodieDuplicateKeyException;对于MOR表,该模式与upsert模式行为一致。
- non-strict模式,对主键表采用insert处理。
- upsert模式,对于主键表的重复值进行更新操作。
- 在提交Spark SQL作业时,用户可以在设置中配置以下参数,切换bulk insert作为Insert语句的写入方式。
hoodie.sql.bulk.insert.enable = true hoodie.sql.insert.mode = non-strict
- 也可以设置hoodie.datasource.write.operation的来控制insert语句的写入方式,可选包括bulk_insert、insert、upsert。(注意:会覆盖配置的hoodie.sql.insert.mode的结果)
hoodie.datasource.write.operation = upsert
示例
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;
权限需求
由DLI提供的元数据服务
- SQL权限:
database
table
无
INSERT_INTO_TABLE
- 细粒度权限:dli:table:insertIntoTable
由LakeFormation提供的元数据服务,权限配置详见LakeFormation文档。
系统响应
可以确认任务状态成功,运行QUERY语句查看表中写入的数据。