insert overwrite table sale_detail_insert partition (sale_date='2013', region='china')
insert into table sale_detail_insert partition (sale_date='2013', region='china')
注:Insert into与Insert overwrite的区别是:Insert into会向表或表的分区中追加数据,而Insert overwrite会在向表或分区中插入数据前清空表中的原有数据。在insert overwrite|into后需要加入table关键字,不是直接使用tablename。当Insert的目标表是分区表时,指定分区值,语法中不允许使用函数等表达式。目前INSERT OVERWRITE还不支持指定插入列的功能,暂时只能用INSERT INTO。不支持insert into到hash clustering表。
insert overwrite table sale_detail_insert partition (sale_date='2013', region='china')
select shop_name, customer_id, total_price, sale_date, region from sale_detail;
-- 报错返回,sale_date,region为分区列,不允许出现在静态分区的insert语句中。
注:向某个分区插入数据时,分区列不允许出现在select列表中。
create table sale_detail_multi like sale_detail;
from sale_detail
insert overwrite table sale_detail_multi partition (sale_date='2010', region='china' )
select shop_name, customer_id, total_price where .....
insert overwrite table sale_detail_multi partition (sale_date='2011', region='china' )
select shop_name, customer_id, total_price where .....;
注:MaxCompute SQL支持在一个语句中插入不同的结果表或者分区实现多路输出。一般情况下,单个SQL中最多可以写256路输出,超过256路,则报语法错误。对于分区表,同一个目标分区不允许出现多次。对于未分区表,该表不能出现多次。对于同一张分区表的不同分区,不能同时有Insert overwrite和Insert into操作,否则报错返回。