MaxCompute SQL支援您在一條SQL語句中通過insert into或insert overwrite操作將資料插入不同的目標表或者分區中,實現多路輸出。
本文中的命令您可以在如下工具平台執行:
前提條件
執行操作前需要具備目標表的更新許可權(Update)及源表的元資訊讀取許可權(Select)。授權操作請參見MaxCompute許可權。
功能介紹
在使用MaxCompute SQL處理資料時,multi insert操作可以將資料插入不同的目標表或分區中,實現多路輸出。
使用限制
multi insert操作的使用限制如下:
單條
multi insert語句中最多可以寫255路輸出。超過255路,會上報語法錯誤。單條
multi insert語句中,對於分區表,同一個目標資料分割不允許出現多次。單條
multi insert語句中,對於非分區表,該表不能出現多次。
命令格式
from <from_statement>
insert overwrite | into table <table_name1> [partition (<pt_spec1>)]
<select_statement1>
insert overwrite | into table <table_name2> [partition (<pt_spec2>)]
<select_statement2>
...;from_statement:必填。
from子句,代表資料來源。例如,源表名稱。table_name:必填。需要插入資料的目標表名稱。
pt_spec:可選。需要插入資料的目標資料分割資訊,此參數不允許使用函數等運算式,只能是常量。格式為
(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...)。插入多個分區時,例如pt_spec1和pt_spec2,目標資料分割不允許出現多次,即pt_spec1和pt_spec2的分區資訊不相同。select_statement:必填。
select子句,從源表中查詢需要插入的資料。
使用樣本
樣本1:將表sale_detail的資料插入到表sale_detail_multi的2010年及2011年中國的銷售記錄中。命令樣本如下:
--建立表sale_detail_multi。 create table sale_detail_multi like sale_detail; --開啟全表掃描,僅此Session有效。將表sale_detail中的資料插入到表sale_detail_multi。 set odps.sql.allow.fullscan=true; from sale_detail insert overwrite table sale_detail_multi partition (sale_date='2010', region='china' ) select shop_name, customer_id, total_price insert overwrite table sale_detail_multi partition (sale_date='2011', region='china' ) select shop_name, customer_id, total_price; --開啟全表掃描,僅此Session有效。執行select語句查看錶sale_detail_multi中的資料。 set odps.sql.allow.fullscan=true; select * from sale_detail_multi; --返回結果。 +------------+-------------+-------------+------------+------------+ | shop_name | customer_id | total_price | sale_date | region | +------------+-------------+-------------+------------+------------+ | s1 | c1 | 100.1 | 2010 | china | | s2 | c2 | 100.2 | 2010 | china | | s3 | c3 | 100.3 | 2010 | china | | s1 | c1 | 100.1 | 2011 | china | | s2 | c2 | 100.2 | 2011 | china | | s3 | c3 | 100.3 | 2011 | china | +------------+-------------+-------------+------------+------------+樣本2:同一目標資料分割不允許出現多次,否則會返回報錯。錯誤命令樣本如下:
from sale_detail insert overwrite table sale_detail_multi partition (sale_date='2010', region='china' ) select shop_name, customer_id, total_price insert overwrite table sale_detail_multi partition (sale_date='2010', region='china' ) select shop_name, customer_id, total_price;