You need to enable JavaScript to run this app.
导航
重写表或表的某些分区
最近更新时间:2025.06.18 10:58:51首次发布时间:2024.09.20 18:03:58
我的收藏
有用
有用
无用
无用

INSERT OVERWRITE ... 语句用于重写表或表的某些分区,将数据以原子性操作的方式写入。在分区替换时,会自动过滤不符合指定分区的导入数据。

注意事项

  • INSERT OVERWRITE 语句执行时需获取分区锁或者表锁,每个分区或者表的写入任务串行执行,即单分区或者单表写入并发数为 1,无法调整。
  • 请勿同时通过INSERT OVERWRITE 和实时写入方式(INSERT INTODELETEUPDATE)向同一个表中写入数据,否则实时写入的数据会被丢弃。

基本语法

INSERT OVERWRITE TABLE table_name
    [ PARTITION (p1,... | *) ]
    [ (COLUMN [,...]) ]
    { VALUES ([,...] ), ([,...]) | QUERY }

参数说明

  • table_name:需要重写的目标表名。
  • PARTITION:需要重写的分区,可以指定一个或多个分区,使用逗号分隔,最外层需要使用括号。如果不写partition字段,则为重写整表。
  • COLUMN:需要写入目标表的列,可以指定一个或多个列,使用逗号分隔,最外层需要使用括号。
  • VALUES:需要写入的值列表。
  • QUERY:需要写入的查询query

使用示例

  • 单分区键的分区重写:

    INSERT OVERWRITE test.insert_overwrite_t PARTITION (1) SELECT * FROM test.insert_overwrite_s WHERE d = 1;
    
  • 单分区键的分区VALUES重写:

    INSERT OVERWRITE test.insert_overwrite_t PARTITION (2) VALUES (2,6), (3,3);
    
  • 单分区键的多分区重写:

    INSERT OVERWRITE test.insert_overwrite_t PARTITION (1,2) SELECT * FROM test.insert_overwrite_s;
    
  • 多分区键的多分区重写:

    INSERT OVERWRITE test.insert_overwrite_t PARTITION (('1',1), ('2',2)) SELECT * FROM test.insert_overwrite_s;
    
  • 多分区键指定列的导入重写:

    INSERT OVERWRITE test.insert_overwrite_t PARTITION (('1',1)) (s,d,n) SELECT s,d,n FROM test.insert_overwrite_s;
    
  • 整表重写:

    INSERT OVERWRITE test.insert_overwrite_t SELECT * FROM test.insert_overwrite_s;