全部產品
Search
文件中心

MaxCompute:多路輸出(MULTI INSERT)

更新時間:Jun 19, 2024

MaxCompute SQL支援您在一條SQL語句中通過insert intoinsert 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_spec1pt_spec2,目標資料分割不允許出現多次,即pt_spec1pt_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;