INSERT OVERWRITE ...
语句用于重写表或表的某些分区,将数据以原子性操作的方式写入。在分区替换时,会自动过滤不符合指定分区的导入数据。
INSERT OVERWRITE
语句执行时需获取分区锁或者表锁,每个分区或者表的写入任务串行执行,即单分区或者单表写入并发数为 1,无法调整。INSERT OVERWRITE
和实时写入方式(INSERT INTO、DELETE、UPDATE)向同一个表中写入数据,否则实时写入的数据会被丢弃。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;