全部產品
Search
文件中心

MaxCompute:LOAD

更新時間:Jun 19, 2024

如果您需要將外部儲存上的資料匯入MaxCompute的表或表的分區中,可以通過LOAD命令實現該操作。本文為您介紹如何使用LOAD命令將外部儲存上的CSV格式或其他開源格式資料匯入MaxCompute。

本文中的命令您可以在如下工具平台執行:

功能介紹

MaxCompute支援使用load overwriteload into命令將HologresOSSAmazon RedshiftBigQuery外部儲存的CSV格式或其他開源格式資料匯入MaxCompute的表或表的分區。其中:

  • Amazon Redshift和BigQuery的資料需要先匯入OSS,才可以通過OSS匯入MaxCompute。

  • MaxCompute支援將資料按照動態分區方式匯入MaxCompute的分區表的分區。

  • load into命令會直接向表或分區中追加資料。load overwrite命令會先清空表或分區中的原有資料,再向表或分區中插入資料。

使用限制

  • 當前只支援將外部儲存的資料匯入至同地區的MaxCompute專案空間中。

  • 通過OSS匯入資料時:

    匯入到目標MaxCompute分區表時,目標表的Schema(除分區列)需要和外部資料格式一致,且外部資料的Schema不包含分區列。

  • 通過Hologres匯入資料時:

    • 不支援將Hologres分區表資料匯入MaxCompute。

    • 不支援使用雙簽名授權模式的Hologres外表匯入資料至MaxCompute。

前提條件

  • 操作帳號已具備MaxCompute的相關許可權。

    執行load操作前,操作帳號需要具備MaxCompute專案空間建立表許可權(CreateTable)及修改表許可權(Alter)。授權操作請參見MaxCompute許可權

  • 操作帳號已具備外部儲存資料對應資料來源的相關許可權。

    向MaxCompute匯入外部儲存資料前,您需要先對MaxCompute進行授權,允許MaxCompute訪問外部儲存(OSS或Hologres)。load overwriteload into命令的授權模式沿用了MaxCompute外部表格的授權模式,OSS和Hologres的授權引導如下。

    外部儲存:OSS

    您可以一鍵授權,具備更高安全性。詳情請參見STS模式授權

    外部儲存:Hologres

    您可建立一個RAM角色,為其授權允許MaxCompute訪問的許可權,並將角色添加至Hologres執行個體,完成授權,操作詳情請參見建立Hologres外部表格(STS模式)

完成上述授權的前期準備後,您需要根據匯入資料的格式類型,選擇對應的匯入方式:

通過內建Extractor(StorageHandler)匯入資料

  • 命令格式

    {load overwrite|into} table <table_name> [partition (<pt_spec>)]
    from location <external_location>
    stored by <StorageHandler>
    [with serdeproperties (<Options>)];
  • 參數說明

    外部儲存:OSS

    • table_name:必填。需要插入資料的目標表名稱。目標表需要提前建立,目標表的Schema(除分區列)需要和外部資料格式一致。

    • pt_spec:可選。需要插入資料的目標表分區資訊。格式為(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...)

    • external_location:必填。指定讀取外部儲存資料的OSS目錄,格式為'oss://<oss_endpoint>/<object>',詳情請參見OSS訪問網域名稱使用規則,系統會預設讀取該目錄下所有的檔案。

    • StorageHandler:必填。指定內建的StorageHandler名稱。com.aliyun.odps.CsvStorageHandler是內建的處理CSV格式檔案的StorageHandler,定義了如何讀或寫CSV檔案。您只需要指定該參數,相關邏輯已經由系統實現。使用方法和MaxCompute外部表格一致,詳情請參見建立OSS外部表格

    • Options:可選。指定外部表格相關參數,SERDEPROPERTIES支援的屬性和MaxCompute外部表格一致,屬性列表詳情請參見建立OSS外部表格

    外部儲存:Hologres

    • table_name:必填。需要插入資料的目標表名稱。目標表需要提前建立,目標表的Schema(除分區列)需要和外部資料格式一致。

    • pt_spec:可選。需要插入資料的目標表分區資訊。格式為(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...)

    • external_location:必填。指定Hologres的JDBC串連地址,格式為'<jdbc:postgresql://<endpoint>:<port>/<database>?ApplicationName=MaxCompute&[currentSchema=<schema>&][useSSL={true|false}&]table=<holo_table_name>/>'

        • endpoint:必填。Hologres執行個體的傳統網路網域名稱。擷取方式,請參見執行個體配置

        • port:必填。Hologres執行個體的網路連接埠。擷取方式,請參見執行個體配置擷取endpoint和連接埠

        • database:必填。串連的Hologres資料庫名稱。更多Hologres資料庫資訊,請參見CREATE DATABASE

        • ApplicationName:必填。預設為MaxCompute,無需修改。

        • schema:可選。如果表名在Hologres資料庫內是唯一的,或源表是預設Schema中的表,可以不配置該屬性。更多Schema資訊,請參見CREATE SCHEMA

        • holo_table_name:必填。Hologres源表名稱。更多Hologres源表資訊,請參見建表概述查看錶

    • StorageHandler:必填。定義了如何查詢Hologres外部表格。固定取值為com.aliyun.odps.jdbc.JdbcStorageHandler,使用JdbcStorageHandler串連方式。

    • Options:可選。指定外部表格相關參數,SERDEPROPERTIES支援的屬性和MaxCompute外部表格一致。

        • mcfed.mapreduce.jdbc.driver.class:必填。指定串連Hologres資料庫的驅動程式。固定取值為org.postgresql.Driver

        • odps.federation.jdbc.target.db.type:必填。指定串連的資料庫類型。固定取值為holo

        • odps.federation.jdbc.colmapping:可選。如果需要將指定資料來源的部分列映射至Hologres外部表格,需要配置該參數,指定Hologres源表的欄位和Hologres外部表格欄位的映射關係。如果不配置該參數,按照源表欄位順序映射至Hologres外部表格。如果Hologres裡的欄位名稱是大寫的話,需要為Hologres欄位名稱添加雙引號("")。格式為:MaxCompute欄位1 : "Hologres欄位1" [,MaxCompute欄位2 : "Hologres欄位2" ,...]

  • 使用樣本

    外部儲存:OSS

    通過內建Extractor(StorageHandler)匯入資料。假設MaxCompute和OSS的Owner是同一個帳號,通過阿里雲內網將vehicle.csv檔案的資料匯入MaxCompute。

    1. 單擊此處完成一鍵授權

    2. 將vehicle.csv檔案儲存至OSS Bucket目錄下mc-test/data_location/,地區為oss-cn-hangzhou,並組織OSS目錄路徑。建立OSS Bucket詳情請參見建立儲存空間

      vehicle.csv檔案資料如下:

      1,1,51,1,46.81006,-92.08174,9/14/2014 0:00,S
      1,2,13,1,46.81006,-92.08174,9/14/2014 0:00,NE
      1,3,48,1,46.81006,-92.08174,9/14/2014 0:00,NE
      1,4,30,1,46.81006,-92.08174,9/14/2014 0:00,W
      1,5,47,1,46.81006,-92.08174,9/14/2014 0:00,S
      1,6,9,1,46.81006,-92.08174,9/14/2014 0:00,S
      1,7,53,1,46.81006,-92.08174,9/14/2014 0:00,N
      1,8,63,1,46.81006,-92.08174,9/14/2014 0:00,SW
      1,9,4,1,46.81006,-92.08174,9/14/2014 0:00,NE
      1,10,31,1,46.81006,-92.08174,9/14/2014 0:00,N

      根據Bucket、地區、Endpoint資訊組織OSS目錄路徑如下:

      oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-test/data_location/
    3. 登入MaxCompute用戶端建立目標表ambulance_data_csv_load。命令樣本如下:

      create table ambulance_data_csv_load (
      vehicleId INT,
      recordId INT,
      patientId INT,
      calls INT,
      locationLatitute DOUBLE,
      locationLongtitue DOUBLE,
      recordTime STRING,
      direction STRING );
    4. 執行load overwrite命令,將OSS上的vehicle.csv檔案匯入目標表。命令樣本如下:

      load overwrite table ambulance_data_csv_load
      from
      location 'oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-test/data_location/'
      stored by 'com.aliyun.odps.CsvStorageHandler'
      with serdeproperties (
      'odps.properties.rolearn'='acs:ram::xxxxx:role/aliyunodpsdefaultrole',   --AliyunODPSDefaultRole的ARN資訊,可通過RAM角色管理頁面擷取。
      'odps.text.option.delimiter'=','
      );

      查看角色的ARN資訊請參見查看RAM角色

    5. 查看目標表ambulance_data_csv_load的匯入結果。命令樣本如下:

      --開啟全表掃描,僅此Session有效。
      set odps.sql.allow.fullscan=true;
      select * from ambulance_data_csv_load;

      返回結果如下:

      +------------+------------+------------+------------+------------------+-------------------+------------+------------+
      | vehicleid  | recordid   | patientid  | calls      | locationlatitute | locationlongtitue | recordtime | direction  |
      +------------+------------+------------+------------+------------------+-------------------+------------+------------+
      | 1          | 1          | 51         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | S          |
      | 1          | 2          | 13         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | NE         |
      | 1          | 3          | 48         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | NE         |
      | 1          | 4          | 30         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | W          |
      | 1          | 5          | 47         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | S          |
      | 1          | 6          | 9          | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | S          |
      | 1          | 7          | 53         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | N          |
      | 1          | 8          | 63         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | SW         |
      | 1          | 9          | 4          | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | NE         |
      | 1          | 10         | 31         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | N          |
      +------------+------------+------------+------------+------------------+-------------------+------------+------------+

    外部儲存:Hologres

    • 樣本情境

      已建立Hologres執行個體及資料庫,並建立一張表;已在MaxCompute建立了一個Hologres外部表格,通過外部表格查詢已建立的Hologres表資料如下。

      --查詢holo外表:
      select * from mf_holo_ext4;
      --返回
      +------------+------+
      | id         | name |
      +------------+------+
      | 1          | abc  |
      | 2          | ereg |
      +------------+------+
    • 通過LOAD命令將此Hologres表資料匯入MaxCompute內表操作樣本。

      1. 建立一個MaxCompute內表。

        --建立內表
        create table mf_from_holo(id bigint,name string);
      2. 通過LOAD命令匯入資料至MaxCompute。

        --load holo表資料到mc內表
        load into table mf_from_holo 
        from location 'jdbc:postgresql://hgprecn-cn-wwo3ft0l****-cn-beijing-internal.hologres.aliyuncs.com:80/mf_db?application_name=MaxCompute&currentSchema=public&useSSL=false&table=mf_holo/' 
        stored by 'com.aliyun.odps.jdbc.JdbcStorageHandler' 
        with serdeproperties (
          'odps.properties.rolearn'='acs:ram::18927322887*****:role/hologressrole',
          'mcfed.mapreduce.jdbc.driver.class'='org.postgresql.Driver', 
          'odps.federation.jdbc.target.db.type'='holo'
        );
      3. 查詢匯入結果。

        select * from mf_from_holo;
        --返回
        +------------+------+
        | id         | name |
        +------------+------+
        | 2          | ereg |
        | 1          | abc  |
        +------------+------+

匯入其他開源格式資料

  • 命令格式

    {load overwrite|into} table <table_name> [partition (<pt_spec>)]
    from location <external_location>
    [row format serde '<serde_class>'
      [with serdeproperties (<Options>)]
    ]
    stored as <file_format>;
  • 參數說明

    • table_name:必填。需要插入資料的目標表名稱。目標表需要提前建立,目標表的Schema(除分區列)需要和外部資料格式一致。

    • pt_spec:可選。需要插入資料的目標表分區資訊。格式為(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...)

    • external_location:必填。指定讀取外部儲存資料的OSS目錄,格式為'oss://<oss_endpoint>/<object>',詳情請參見OSS訪問網域名稱使用規則,系統會預設讀取該目錄下所有的檔案。

    • serde_class:可選。使用方法和MaxCompute外部表格一致,詳情請參見建立OSS外部表格

    • Options:必填。指定外部表格相關參數,SERDEPROPERTIES支援的屬性和MaxCompute外部表格一致,屬性列表詳情請參見建立OSS外部表格

    • file_format:必填。指定匯入資料檔案格式。例如ORC、PARQUET、RCFILE、SEQUENCEFILE和TEXTFILE。使用方法和MaxCompute外部表格一致,詳情請參見建立OSS外部表格

      說明
      • serde_classOptions使用預設值時,可以省略不寫。

      • 匯入的單個檔案大小不能超過3 GB,如果檔案過大,建議拆分。

  • 使用樣本

    • 樣本1:匯入其他開源格式資料。假設MaxCompute和OSS的Owner是同一個帳號,通過阿里雲內網將vehicle.textfile檔案的資料匯入MaxCompute。

      說明

      若MaxCompute和OSS的Owner不是同一個帳號,授權方式可參見OSS的STS模式授權

      1. 單擊此處完成一鍵授權

      2. 將vehicle.txtfile檔案儲存至OSS Bucket目錄下mc-test/data_location/,地區為oss-cn-hangzhou,並組織OSS目錄路徑。建立OSS Bucket詳情請參見建立儲存空間

        vehicle.textfile檔案資料如下:

        1,1,51,1,46.81006,-92.08174,9/14/2014 0:00,S
        1,2,13,1,46.81006,-92.08174,9/14/2014 0:00,NE
        1,3,48,1,46.81006,-92.08174,9/14/2014 0:00,NE
        1,4,30,1,46.81006,-92.08174,9/14/2014 0:00,W
        1,5,47,1,46.81006,-92.08174,9/14/2014 0:00,S
        1,6,9,1,46.81006,-92.08174,9/14/2014 0:00,S
        1,7,53,1,46.81006,-92.08174,9/14/2014 0:00,N
        1,8,63,1,46.81006,-92.08174,9/14/2014 0:00,SW
        1,9,4,1,46.81006,-92.08174,9/14/2014 0:00,NE
        1,10,31,1,46.81006,-92.08174,9/14/2014 0:00,N

        根據Bucket、地區、Endpoint資訊組織OSS目錄路徑如下:

        oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-test/data_location/
      3. 登入MaxCompute用戶端建立目標表ambulance_data_textfile_load_pt。命令樣本如下:

        create table ambulance_data_textfile_load_pt (
        vehicleId STRING,
        recordId STRING,
        patientId STRING,
        calls STRING,
        locationLatitute STRING,
        locationLongtitue STRING,
        recordTime STRING,
        direction STRING)
        partitioned by (ds STRING);
      4. 執行load overwrite命令,將OSS上的vehicle.textfile檔案匯入目標表。命令樣本如下:

        load overwrite table ambulance_data_textfile_load_pt partition(ds='20200910')
        from
        location 'oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-test/data_location/'
        row format serde 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
        stored as textfile;
      5. 查看目標表ambulance_data_textfile_load_pt的匯入結果。命令樣本如下:

        --開啟全表掃描,僅此Session有效。
        set odps.sql.allow.fullscan=true;
        select * from ambulance_data_textfile_load_pt;

        返回結果如下:

        +------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+
        | vehicleid  | recordid   | patientid  | calls      | locationlatitute | locationlongtitue | recordtime | direction  | ds         |
        +------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+
        | 1,1,51,1,46.81006,-92.08174,9/14/2014 0:00,S | NULL       | NULL       | NULL       | NULL             | NULL              | NULL       | NULL       | 20200910   |
        | 1,2,13,1,46.81006,-92.08174,9/14/2014 0:00,NE | NULL       | NULL       | NULL       | NULL             | NULL              | NULL       | NULL       | 20200910   |
        | 1,3,48,1,46.81006,-92.08174,9/14/2014 0:00,NE | NULL       | NULL       | NULL       | NULL             | NULL              | NULL       | NULL       | 20200910   |
        | 1,4,30,1,46.81006,-92.08174,9/14/2014 0:00,W | NULL       | NULL       | NULL       | NULL             | NULL              | NULL       | NULL       | 20200910   |
        | 1,5,47,1,46.81006,-92.08174,9/14/2014 0:00,S | NULL       | NULL       | NULL       | NULL             | NULL              | NULL       | NULL       | 20200910   |
        | 1,6,9,1,46.81006,-92.08174,9/14/2014 0:00,S | NULL       | NULL       | NULL       | NULL             | NULL              | NULL       | NULL       | 20200910   |
        | 1,7,53,1,46.81006,-92.08174,9/14/2014 0:00,N | NULL       | NULL       | NULL       | NULL             | NULL              | NULL       | NULL       | 20200910   |
        | 1,8,63,1,46.81006,-92.08174,9/14/2014 0:00,SW | NULL       | NULL       | NULL       | NULL             | NULL              | NULL       | NULL       | 20200910   |
        | 1,9,4,1,46.81006,-92.08174,9/14/2014 0:00,NE | NULL       | NULL       | NULL       | NULL             | NULL              | NULL       | NULL       | 20200910   |
        | 1,10,31,1,46.81006,-92.08174,9/14/2014 0:00,N | NULL       | NULL       | NULL       | NULL             | NULL              | NULL       | NULL       | 20200910   |
        +------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+
    • 樣本2:將資料按動態分區方式匯入目標表。

      說明

      如果OSS目錄下的子目錄是以分區名方式組織的,則可以將資料按動態分區的方式匯入到分區表。

      1. 單擊此處完成一鍵授權

      2. 將vehicle1.csv檔案和vehicle2.csv檔案分別儲存至OSS Bucket目錄mc-test/data_location/ds=20200909/mc-test/data_location/ds=20200910/,地區為oss-cn-hangzhou,並組織OSS目錄路徑。建立OSS Bucket詳情請參見建立儲存空間

        vehicle1.csv檔案和vehicle2.csv檔案資料如下:

        --vehicle1.csv
        1,1,51,1,46.81006,-92.08174,9/14/2014 0:00,S
        1,2,13,1,46.81006,-92.08174,9/14/2014 0:00,NE
        1,3,48,1,46.81006,-92.08174,9/14/2014 0:00,NE
        1,4,30,1,46.81006,-92.08174,9/14/2014 0:00,W
        1,5,47,1,46.81006,-92.08174,9/14/2014 0:00,S
        1,6,9,1,46.81006,-92.08174,9/14/2014 0:00,S
        --vehicle2.csv
        1,7,53,1,46.81006,-92.08174,9/14/2014 0:00,N
        1,8,63,1,46.81006,-92.08174,9/14/2014 0:00,SW
        1,9,4,1,46.81006,-92.08174,9/14/2014 0:00,NE
        1,10,31,1,46.81006,-92.08174,9/14/2014 0:00,N

        根據Bucket、地區、Endpoint資訊組織OSS目錄路徑如下:

        oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-test/data_location/ds=20200909/'
        oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-test/data_location/ds=20200910/'
      3. 登入MaxCompute用戶端建立目標表ambulance_data_csv_load_dynpt。命令樣本如下:

        create table ambulance_data_csv_load_dynpt (
        vehicleId STRING,
        recordId STRING,
        patientId STRING,
        calls STRING,
        locationLatitute STRING,
        locationLongtitue STRING,
        recordTime STRING,
        direction STRING)
        partitioned by (ds STRING);
      4. 執行load overwrite命令,將OSS上的檔案匯入目標表。命令樣本如下:

        load overwrite table ambulance_data_csv_load_dynpt partition(ds)
        from
        location 'oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-test/data_location/'
        row format serde 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
        stored as textfile;
      5. 查看目標表ambulance_data_csv_load_dynpt的匯入結果。命令樣本如下:

        --開啟全表掃描,僅此Session有效。
        set odps.sql.allow.fullscan=true;
        select * from ambulance_data_csv_load_dynpt;

        返回結果如下:

        +------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+
        | vehicleid  | recordid   | patientid  | calls      | locationlatitute | locationlongtitue | recordtime | direction  | ds         |
        +------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+
        | 1          | 7          | 53         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | N          | 20200909   |
        | 1          | 8          | 63         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | SW         | 20200909   |
        | 1          | 9          | 4          | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | NE         | 20200909   |
        | 1          | 10         | 31         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | N          | 20200909   |
        | 1          | 1          | 51         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | S          | 20200910   |
        | 1          | 2          | 13         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | NE         | 20200910   |
        | 1          | 3          | 48         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | NE         | 20200910   |
        | 1          | 4          | 30         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | W          | 20200910   |
        | 1          | 5          | 47         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | S          | 20200910   |
        | 1          | 6          | 9          | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | S          | 20200910   |
        +------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+

相關文檔

若您希望將MaxCompute專案中的資料匯出到外部儲存(OSS、Hologres),以供其他計算引擎使用,請參見UNLOAD