文档首页 > > SQL语法参考> 批作业SQL语法> 插入数据

插入数据

分享
更新时间: 2020/05/12 GMT+08:00

功能描述

将SELECT查询结果或某条数据插入到表中。

语法格式

  • 将SELECT查询结果插入到表中
    1
    2
    INSERT INTO [TABLE] [db_name.]table_name
      [PARTITION part_spec] select_statement;
    
    1
    2
    INSERT OVERWRITE TABLE [db_name.]table_name
      [PARTITION part_spec] select_statement;
    
    part_spec:  
      : (part_col_name1=val1 [, part_col_name2=val2, ...])
  • 将某条数据插入到表中
    1
    2
    INSERT INTO [TABLE] [db_name.]table_name
      [PARTITION part_spec] VALUES values_row [, values_row ...];
    
    1
    2
    INSERT OVERWRITE TABLE [db_name.]table_name
      [PARTITION part_spec] VALUES values_row [, values_row ...];
    
    values_row:
      : (val1 [, val2, ...])

关键字

表1 INSERT参数

参数

描述

db_name

需要执行INSERT命令的表所在数据库的名称。

table_name

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

part_spec

指定详细的分区信息。若分区字段为多个字段,可以不包含所有的字段,会匹配上对应的分区。单表分区数最多允许7000个。

select_statement

源表上的SELECT查询(支持DLI表、OBS表)。

values_row

想要插入到表中的值,列与列之间用逗号分隔。

注意事项

  • 表必须已经存在。
  • 被插入的OBS表在建表时只能指定文件夹路径。
  • 源表和目标表的数据类型和列字段个数应该相同,否则插入失败。
  • 不建议对同一张表并发插入数据,因为有一定概率发生并发冲突,导致插入失败。
  • INSERT INTO命令用于将查询的结果追加到目标表中。
  • INSERT OVERWRITE命令用于覆盖源表中已有的数据。
  • INSERT INTO命令可以并行执行,INSERT OVERWRITE命令只有在分区表下不同的插入到不同静态分区才可以并行。
  • INSERT INTO命令和INSERT OVERWRITE命令同时执行,其结果是未知的。
  • 在从源表插入数据到目标表的过程中,无法在源表中导入或更新数据。
  • 对于Hive分区表的动态INSERT OVERWRITE,支持覆盖涉及到的分区数据,不支持覆盖整表数据。
  • 如果需要覆盖DataSource表指定分区数据,需要先配置参数:dli.sql.dynamicPartitionOverwrite.enabled=true,再通过“insert overwrite”语句实现,“dli.sql.dynamicPartitionOverwrite.enabled”默认值为“false”,表示覆盖整表数据。例如:
    1
    insert overwrite table tb1 partition(part1='v1', part2='v2') select * from ...
    

    “数据湖探索管理控制台>SQL编辑器”页面,单击编辑窗口右上角“设置”,可配置参数。

示例

  • 将SELECT查询结果插入到表中
    • 使用DataSource语法创建一个parquet格式的分区表
      CREATE TABLE data_source_tab1 (col1 INT, p1 INT, p2 INT)
        USING PARQUET PARTITIONED BY (p1, p2);
    • 插入查询结果到分区 (p1 = 3, p2 = 4)中
      INSERT INTO data_source_tab1 PARTITION (p1 = 3, p2 = 4)
        SELECT id FROM RANGE(1, 3);
    • 插入新的查询结果到分区 (p1 = 3, p2 = 4) 中
      INSERT OVERWRITE TABLE default.data_source_tab1 PARTITION (p1 = 3, p2 = 4)
        SELECT id FROM RANGE(3, 5);
  • 将某条数据插入表中
    • 使用Hive语法创建一个parquet格式的分区表
      CREATE TABLE hive_serde_tab1 (col1 INT, p1 INT, p2 INT)
        USING HIVE OPTIONS(fileFormat 'PARQUET') PARTITIONED BY (p1, p2);
    • 插入两条数据到分区 (p1 = 3, p2 = 4)中
      INSERT INTO hive_serde_tab1 PARTITION (p1 = 3, p2 = 4)
        VALUES (1), (2);
    • 插入新的数据到分区 (p1 = 3, p2 = 4) 中
      INSERT OVERWRITE TABLE hive_serde_tab1 PARTITION (p1 = 3, p2 = 4)
        VALUES (3), (4);
分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

智能客服提问云社区提问