すべてのプロダクト
Search
ドキュメントセンター

MaxCompute:LOAD

最終更新日:Mar 25, 2026

LOAD 文を使用して、外部データストア(例:OSS、Hologres、Amazon Redshift、BigQuery)から MaxCompute のテーブルまたはパーティションにデータをロードします。

概要

MaxCompute では、LOAD OVERWRITE または LOAD INTO コマンドを使用して、CSV やその他のオープンソース形式のデータを、HologresObject Storage Service (OSS)Amazon Redshift、および BigQuery などの外部ストレージから MaxCompute のテーブルまたはパーティションにデータをインポートします。

  • Amazon Redshift および BigQuery から MaxCompute にデータをロードするには、まずこれらのデータを OSS にステージングする必要があります。

  • MaxCompute では、動的パーティショニングを使用して、パーティションテーブルにデータをロードします。

  • LOAD INTO コマンドは、テーブルまたはパーティションにデータを追加します。LOAD OVERWRITE コマンドは、まずテーブルまたはパーティションをクリアした後、新しいデータを挿入します。

制限事項

権限要件

  • MaxCompute の権限

    • CreateTable および Alter 権限:MaxCompute プロジェクト内でテーブルを作成したり、テーブルのデータを変更したりするために必要です。手順については、「MaxCompute の権限」をご参照ください。

  • 外部ストレージの権限

    • OSS の権限:MaxCompute が OSS にアクセス(オブジェクトの読み取りおよび一覧表示)できるように、OSS に対する権限を付与する必要があります。セキュリティを強化するため、認証には STS モード を使用することを推奨します。詳細については、「STS モードでのアクセス権限付与」をご参照ください。

    • Hologres の権限:MaxCompute が Hologres にアクセスできるようにするには、RAM ロールを作成し、必要な権限を付与した後、そのロールを Hologres インスタンスに追加する必要があります。詳細については、「Hologres 外部テーブルの作成(STS モード)」をご参照ください。

その他の制限事項

  • LOAD コマンドは、ホワイトリスト/ブラックリストパラメーターをサポートしていません

  • 外部ストレージと対象の MaxCompute プロジェクトは、同一のリージョンに存在している必要があります。

  • OSS からデータをロードする場合:

    対象のパーティションテーブルのスキーマ(パーティション列を除く)は、外部データのスキーマと一致している必要があります。また、外部データのスキーマにはパーティション列を含めてはなりません。

  • Hologres からデータをロードする場合:

    • Hologres のパーティションテーブルから MaxCompute へのデータロードはできません。

    • デュアル署名認証モードを使用する Hologres 外部テーブルから、MaxCompute がデータをロードすることはできません。

データのロード

OSS および Hologres

OSS または Hologres からのデータロード

コマンド構文

{LOAD OVERWRITE|INTO} TABLE <table_name> [PARTITION (<pt_spec>)]
FROM LOCATION <external_location>
STORED BY <StorageHandler>
[WITH SERDEPROPERTIES (<Options>)];

パラメーター

OSS

パラメーターの詳細を表示

  • table_name:必須。

    対象テーブルの名前です。データをロードする前に、このテーブルを作成する必要があります。そのスキーマ(パーティション列を除く)は、外部データ形式と一致している必要があります。

  • pt_spec:任意。

    データをロードする対象テーブルのパーティションです。形式は (partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...) です。

  • external_location:必須。

    データを読み取る OSS ディレクトリです。形式は 'oss://<oss_endpoint>/<object>' です。「エンドポイントおよびバケットドメイン名を使用した OSS へのアクセス」をご参照ください。デフォルトでは、MaxCompute はこのディレクトリ内のすべてのファイルを読み取ります。

  • StorageHandler:必須。

    組み込みストレージハンドラの名前を指定します。CSV ファイルの場合は com.aliyun.odps.CsvStorageHandler を使用します。これは、CSV データの読み取りおよび書き込み方法を定義します。実装ロジックはシステムが処理するため、名前のみを指定すれば十分です。MaxCompute 外部テーブルでの使用方法と同じです。「OSS 外部テーブルの作成」をご参照ください。

  • Options:任意。

    外部テーブルのパラメーターを指定します。SERDEPROPERTIES でサポートされるプロパティは、MaxCompute 外部テーブルで使用されるものと同じです。サポートされているプロパティの一覧については、「OSS 外部テーブルの作成」をご参照ください。

Hologres

パラメーターの詳細を表示

  • table_name:必須。

    対象テーブルの名前です。データをロードする前に、このテーブルを作成する必要があります。そのスキーマ(パーティション列を除く)は、外部データ形式と一致している必要があります。

  • pt_spec:任意。

    データをロードする対象テーブルのパーティションです。形式は (partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...) です。

  • external_location:必須。

    Hologres への JDBC 接続 URL です。形式は '<jdbc:postgresql://<endpoint>:<port>/<database>?ApplicationName=MaxCompute&[currentSchema=<schema>&][useSSL={true|false}&]table=<holo_table_name>/>' です。

    • endpoint:必須。

      Hologres インスタンスの クラシックネットワークドメイン名 です。取得方法については、「インスタンスの詳細」をご参照ください。

      重要

      MaxCompute は、Hologres への接続をクラシックネットワークドメイン名経由でのみサポートしています。VPC ネットワークドメイン名を使用した接続はサポートされていません。

    • port:必須。

      Hologres インスタンスのネットワークポートです。取得方法については、「インスタンスの詳細」をご参照ください。

    • database:必須。

      接続先の Hologres データベースの名前です。Hologres データベースの詳細については、「CREATE DATABASE」をご参照ください。

    • ApplicationName:必須。

      デフォルト値は MaxCompute であり、変更する必要はありません。

    • schema:任意。

      Hologres データベース内でテーブル名が一意であるか、ソーステーブルがデフォルトスキーマにある場合は、このパラメーターを省略できます。スキーマの詳細については、「CREATE SCHEMA」をご参照ください。

    • holo_table_name:必須。

      Hologres のソーステーブルの名前です。Hologres ソーステーブルの詳細については、「CREATE TABLE」をご参照ください。

  • StorageHandler:必須。

    Hologres 外部テーブルのクエリ方法を定義します。この値は固定で、com.aliyun.odps.jdbc.JdbcStorageHandler です。

  • Options:必須。

    外部テーブルに関連するパラメーターを指定します。SERDEPROPERTIES でサポートされるプロパティは、MaxCompute 外部テーブルで使用されるものと同じです。

    • mcfed.mapreduce.jdbc.driver.class:必須。

      Hologres データベースへの接続に使用するドライバーを指定します。値は固定で、org.postgresql.Driver です。

    • odps.federation.jdbc.target.db.type:必須。

      接続先のデータベースの種類を指定します。値は固定で、holo です。

    • odps.federation.jdbc.colmapping:任意。

      MaxCompute 外部テーブルと Hologres ソーステーブル間の列マッピングを指定します。列のサブセットのみをマッピングする場合や、列名が異なる場合に使用します。

      • このパラメーターを設定しない場合、列は名前でマッピングされます。

      • このパラメーターを設定しても列のサブセットのみをマッピングする場合、残りの列は名前でマッピングされます。マッピングされない列の名前またはデータ型が一致しない場合はエラーが報告されます。

      • このパラメーターを設定し、Hologres の列名に大文字が含まれる場合は、列名を二重引用符 ("") で囲む必要があります。形式は次のとおりです:MaxCompute_column1:"Hologres_column1"[,MaxCompute_column2:"Hologres_column2",...]

        説明

        Hologres ソーステーブルには c bool, map_B string, a bigint の列があります。Hologres 外部テーブルには a bigint, x string, c bool の列があります。

        このパラメーターを 'x:"map_B"' に設定すると、データのマッピングとクエリが正常に実行されます。

    • mcfed.mapreduce.jdbc.input.query:任意。Hologres ソーステーブルからデータを読み取るカスタム SQL クエリを指定します。クエリの結果セットのスキーマ(列名およびデータ型を含む)は、MaxCompute 外部テーブルのスキーマと一致している必要があります。クエリでエイリアスを使用する場合は、外部テーブルの列名と一致させる必要があります。select_sentence の形式は SELECT xxx FROM <holo_database_name>.<holo_schema_name>.<holo_table_name> です。

サンプル

OSS

このサンプルでは、組み込みエクストラクター(StorageHandler)を使用したデータロード方法を示します。MaxCompute と OSS が同一の Alibaba Cloud アカウントによって所有されていることを前提としており、Alibaba Cloud の内部ネットワークを介して vehicle.csv ファイルを MaxCompute にロードする方法を説明します。

  1. ワンクリック権限付与をクリックします。

  2. vehicle.csv ファイルを、mc-test/data_location/ ディレクトリに保存します。このディレクトリは、oss-cn-hangzhou リージョンの OSS バケット内にあります。その後、OSS ディレクトリパスを構築します。「バケットの作成」をご参照ください。

    OSS ディレクトリパスは、バケット、リージョン、エンドポイント情報から次のように構築されます:

    oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-test/data_location/
  3. MaxCompute クライアント (odpscmd) にログインし、対象テーブル ambulance_data_csv_load を作成します。サンプルコマンド:

    CREATE TABLE ambulance_data_csv_load (
    vehicleId INT,
    recordId INT,
    patientId INT,
    calls INT,
    locationLatitude DOUBLE,
    locationLongitude 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 (
        -- AliyunODPSDefaultRole の ARN。RAM ロール管理ページで取得できます。
        'odps.properties.rolearn'='acs:ram::xxxxx:role/aliyunodpsdefaultrole',
        'odps.text.option.delimiter'=','
    );
    

    ロールの ARN を確認するには、「RAM ロールの表示」をご参照ください。

  5. 対象テーブル ambulance_data_csv_load のデータを検証します。サンプルコマンド:

    -- 全表スキャンを有効化します。この設定は現在のセッションのみ有効です。
    set odps.sql.allow.fullscan=true;
    SELECT * FROM ambulance_data_csv_load;
    
    -- 次の結果が返されます:
    +------------+------------+------------+------------+------------------+-------------------+------------+------------+
    | vehicleid  | recordid   | patientid  | calls      | locationlatitude | locationlongitude | 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

  1. シナリオ

    Hologres インスタンスおよびデータベースが作成済みであり、データベース内にテーブルも作成済みです。

    MaxCompute 内に Hologres 外部テーブルが作成済みです。この外部テーブルを使用して、Hologres テーブルのデータをクエリできます。

    -- Hologres 外部テーブルをクエリ:
    SELECT * FROM holo_ext;
    
    -- 次の結果が返されます:
    +------------+------+
    | id         | name |
    +------------+------+
    | 1          | abc  |
    | 2          | ereg |
    +------------+------+
  2. 次のサンプルでは、LOAD コマンドを使用して、この Hologres テーブルから MaxCompute の内部テーブルにデータをロードする方法を示します。

    1. MaxCompute の内部テーブルを作成します。

      -- 内部テーブルを作成します。
      CREATE TABLE from_holo(id BIGINT, name STRING);
    2. LOAD コマンドを使用して、データを MaxCompute にロードします。

      -- Hologres テーブルから MaxCompute の内部テーブルにデータをロードします。
      LOAD INTO TABLE from_holo 
      FROM LOCATION 'jdbc:postgresql://hgprecn-cn-wwo3ft0l****-cn-beijing-internal.hologres.aliyuncs.com:80/<YOUR_HOLO_DB_NAME>?application_name=MaxCompute&currentSchema=public&useSSL=false&table=<YOUR_HOLOGRES_TABLE_NAME>/' 
      STORED BY 'com.aliyun.odps.jdbc.JdbcStorageHandler' 
      WITH SERDEPROPERTIES (
        'odps.properties.rolearn'='acs:ram::18927322887*****:role/hologresrole',
        'mcfed.mapreduce.jdbc.driver.class'='org.postgresql.Driver', 
        'odps.federation.jdbc.target.db.type'='holo'
      );
      
  3. テーブルをクエリして結果を確認します。

    SELECT * FROM from_holo;
    
    -- 次の結果が返されます:
    +------------+------+
    | id         | name |
    +------------+------+
    | 2          | ereg |
    | 1          | abc  |
    +------------+------+

その他のオープンソース形式

その他のオープンソース形式のデータロード

ロード対象の単一ファイルサイズは3 GB を超えてはいけません。ファイルが大きすぎる場合は、ロード前に分割してください

コマンド構文

{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:必須。

    対象テーブルの名前です。データをロードする前に、このテーブルを作成する必要があります。そのスキーマ(パーティション列を除く)は、外部データ形式と一致している必要があります。

  • pt_spec:任意。

    データをロードする対象テーブルのパーティションです。形式は (partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...) です。

  • external_location:必須。

    データを読み取る OSS ディレクトリです。形式は 'oss://<oss_endpoint>/<object>' です。「エンドポイントおよびバケットドメイン名を使用した OSS へのアクセス」をご参照ください。デフォルトでは、MaxCompute はこのディレクトリ内のすべてのファイルを読み取ります。

  • serde_class:任意。

    デフォルト値を使用する場合は、このパラメーターを省略できます。MaxCompute 外部テーブルでの使用方法と同じです。「OSS 外部テーブルの作成」をご参照ください。

  • Options:任意。

    デフォルト値を使用する場合は、このパラメーターを省略できます。外部テーブルのパラメーターを指定します。SERDEPROPERTIES でサポートされるプロパティは、MaxCompute 外部テーブルで使用されるものと同じです。サポートされているプロパティの一覧については、「OSS 外部テーブルの作成」をご参照ください。

  • file_format:必須。

    ロード対象のデータファイルの形式です(例:ORC、PARQUET、RCFILE、SEQUENCEFILE、TEXTFILE)。MaxCompute 外部テーブルでの使用方法と同じです。「OSS 外部テーブルの作成」をご参照ください。

サンプル

同一アカウント

同一アカウント所有

このサンプルでは、Alibaba Cloud の内部ネットワークを介して vehicle.textfile ファイルを MaxCompute にロードする方法を示します。

説明

MaxCompute と OSS が異なる Alibaba Cloud アカウントによって所有されている場合は、「STS モードでの権限付与」をご参照ください。

  1. ワンクリック権限付与をクリックします。

  2. vehicle.textfile ファイルを、mc-test/data_location/ ディレクトリに保存します。このディレクトリは、oss-cn-hangzhou リージョンの OSS バケット内にあります。その後、OSS ディレクトリパスを構築します。「バケットの作成」をご参照ください。

    OSS ディレクトリパスは、バケット、リージョン、エンドポイント情報から次のように構築されます:

    oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-test/data_location/
  3. MaxCompute クライアント (odpscmd) にログインし、対象テーブル ambulance_data_textfile_load_pt を作成します。サンプルコマンド:

    CREATE TABLE ambulance_data_textfile_load_pt (
      vehicleId STRING,
      recordId STRING,
      patientId STRING,
      calls STRING,
      locationLatitude STRING,
      locationLongitude 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'
    WITH SERDEPROPERTIES ('field.delim' = ',')
    STORED AS TEXTFILE;
  5. 対象テーブル ambulance_data_textfile_load_pt のデータを検証します。サンプルコマンド:

    -- 全表スキャンを有効化します。この設定は現在のセッションのみ有効です。
    SET odps.sql.allow.fullscan=true;
    SELECT * FROM ambulance_data_textfile_load_pt;
    
    -- 次の結果が返されます:
    +-----------+----------+-----------+-------+------------------+-------------------+----------------+-----------+----------+
    | vehicleid | recordid | patientid | calls | locationlatitude | locationlongitude | recordtime     | direction | ds       |
    +-----------+----------+-----------+-------+------------------+-------------------+----------------+-----------+----------+
    | 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 |
    | 1         | 7        | 53        | 1     | 46.81006         | -92.08174         | 9/14/2014 0:00 | N         | 20200910 |
    | 1         | 8        | 63        | 1     | 46.81006         | -92.08174         | 9/14/2014 0:00 | SW        | 20200910 |
    | 1         | 9        | 4         | 1     | 46.81006         | -92.08174         | 9/14/2014 0:00 | NE        | 20200910 |
    | 1         | 10       | 31        | 1     | 46.81006         | -92.08174         | 9/14/2014 0:00 | N         | 20200910 |
    +-----------+----------+-----------+-------+------------------+-------------------+----------------+-----------+----------+

動的パーティション

動的パーティションを使用したデータロード

説明

OSS のサブディレクトリ名が ds=20200909/ のようなパーティションキーと値のペアに基づいている場合、動的パーティションを使用してデータをロードできます。

  1. ワンクリック権限付与をクリックします。

  2. vehicle1.csv および vehicle2.csv ファイルを、それぞれ mc-test/data_location/ds=20200909/ および mc-test/data_location/ds=20200910/ ディレクトリに保存します。これらのディレクトリは、oss-cn-hangzhou リージョンの OSS バケット内にあります。その後、OSS ディレクトリパスを構築します。「バケットの作成」をご参照ください。

    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 クライアント (odpscmd) にログインし、対象テーブル ambulance_data_csv_load_dynpt を作成します。サンプルコマンド:

    CREATE TABLE ambulance_data_csv_load_dynpt (
      vehicleId STRING,
      recordId STRING,
      patientId STRING,
      calls STRING,
      locationLatitude STRING,
      locationLongitude 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 のデータを検証します。サンプルコマンド:

    -- 全表スキャンを有効化します。この設定は現在のセッションのみ有効です。
    SET odps.sql.allow.fullscan=true;
    SELECT * FROM ambulance_data_csv_load_dynpt;
    
    -- 次の結果が返されます:
    +------------+------------+------------+------------+------------------+-------------------+----------------+------------+------------+
    | vehicleid  | recordid   | patientid  | calls      | locationlatitude | locationlongitude | 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   |
    +------------+------------+------------+------------+------------------+-------------------+----------------+------------+------------+

課金

LOAD コマンドは、外部データをデータウェアハウスにロードします。従量課金モデルにおけるインポートデータ量や、サブスクリプションモデルにおける個々のタスクに対しては課金されませんが、すべての LOAD タスクは、そのリソースグループの計算リソースを消費します。

参考文献

他のコンピュートエンジンで利用可能な外部ストレージ(OSS や Hologres など)へ MaxCompute プロジェクトのデータをエクスポートするには、「UNLOAD」をご参照ください。

MaxCompute へのデータインポート

Amazon Redshift および BigQuery のデータは、MaxCompute にロードする前に OSS に一時保存(ステージング)する必要があります。

OSS データのインポート

MaxCompute のパーティションテーブルにデータをロードする場合、そのスキーマ(パーティション列を除く)は外部データのスキーマと一致している必要があります。また、外部データのスキーマにはパーティション列を含めてはなりません。

テキスト形式(CSV および TSV)

CSV または TSV 形式のデータをロードするには、組み込みの StorageHandler を使用します。

構文

LOAD {OVERWRITE|INTO} TABLE <table_name> [PARTITION (<pt_spec>)]
FROM LOCATION <oss_location>
STORED BY <StorageHandler>
[WITH SERDEPROPERTIES ('<property_name>'='<property_value>',...)];

パラメーター

パラメーター

説明

oss_location

OSS 内のソースオブジェクトへのパスです。形式は oss://<oss_endpoint>/<bucket>/<object_path> です。

StorageHandler

組み込みストレージハンドラを指定します:

  • 'com.aliyun.odps.CsvStorageHandler':CSV 形式のファイル用の組み込みハンドラです。

SERDEPROPERTIES

SerDe(Serializer/Deserializer)のプロパティを指定します:

  • 'odps.properties.rolearn':必須。OSS へのアクセスに使用する RAM ロールの ARN です。

  • 'odps.text.option.delimiter':任意。列区切り文字を指定します。デフォルト値はカンマ(,)です。

例 1:CSV ファイルから MaxCompute へデータをロード

この例では、OSS に格納されている vehicle.csv ファイルから MaxCompute テーブルへデータをロードする方法を示します。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

操作手順

  1. OSS で: OSS コンソール にログインします。vehicle.csv ファイルを、oss-cn-hangzhou リージョンのバケット内の mc-load/data_location/ ディレクトリに保存します。バケットの作成方法については、「バケットの作成」をご参照ください。バケット、リージョン、エンドポイントに基づいて OSS パスを以下のように構築します:

    oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-load/data_location/
  2. MaxCompute で: MaxCompute クライアント にログインし、ターゲットテーブルを作成して、LOAD 文を実行します。

    -- ターゲットテーブルを作成します。
    CREATE TABLE IF NOT EXISTS ambulance_data_csv_load (
        vehicleId INT,
        recordId INT,
        patientId INT,
        calls INT,
        locationLatitute DOUBLE,
        locationLongtitue DOUBLE,
        recordTime STRING,
        direction STRING
    );
    
    -- LOAD 文を実行します。
    LOAD OVERWRITE TABLE ambulance_data_csv_load
    FROM LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-load/data_location/'
    STORED BY 'com.aliyun.odps.CsvStorageHandler'
    WITH SERDEPROPERTIES (
        'odps.properties.rolearn'='acs:ram::123456789:role/AliyunODPSDefaultRole',
        'odps.text.option.delimiter'=','
    );
  3. 結果の確認: ターゲットテーブルをクエリします。

    -- 全表スキャンを有効化します(現在のセッションのみ有効)。
    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         |
    +------------+------------+------------+------------+------------------+-------------------+------------+------------+

例 2:動的パーティションを使用してパーティションテーブルへデータをロード

この例では、OSS に格納されている vehicle1.csv および vehicle2.csv ファイルから、対応するパーティションを含む MaxCompute テーブルへデータをロードする方法を示します。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

操作手順

  1. OSS の場合: OSS コンソール にログインします。vehicle2.csv ファイルを mc-load/data_location/ds=20200909/ ディレクトリに、vehicle1.csv ファイルを mc-load/data_location/ds=20200910/ ディレクトリに保存します。これらのディレクトリは、oss-cn-hangzhou リージョン内のバケットにあります。バケットの作成方法について詳しくは、「バケットの作成」をご参照ください。OSS パスは、バケット、リージョン、およびエンドポイントに基づいて以下のように構築します:

    oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-load/data_location/ds=20200909/'
    oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-load/data_location/ds=20200910/'
  2. MaxCompute で: MaxCompute クライアント にログインし、ターゲットテーブルを作成して、LOAD 文を実行します。

    -- ターゲットテーブルを作成します。
    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);
    
    -- LOAD 文を実行します。
    load overwrite table ambulance_data_csv_load_dynpt partition(ds)
    from
    location 'oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-load/data_location/'
    row format serde 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
    stored as textfile;
  3. 結果の確認: ターゲットテーブルにインポートされたデータを表示します。

    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   |
    +------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+

オープンソース形式

Parquet、ORC、JSON、Avro、RCFile、SequenceFile、TextFile など、さまざまなオープンソース形式のデータをロードできます。

構文

LOAD {OVERWRITE|INTO} TABLE <table_name> [PARTITION (<pt_spec>)]
FROM LOCATION <oss_location>
ROW FORMAT SERDE '<serde_class>'
[WITH SERDEPROPERTIES ('<property_name>'='<property_value>',...)]
STORED AS <file_format>;

主なパラメーター

パラメーター

説明

oss_location

OSS 内のソースオブジェクトへのパスです。形式は oss://<oss_endpoint>/<bucket>/<object_path> です。

file_format

ファイル形式です。サポートされる形式には PARQUETORCJSONTEXTFILE があります。

serde_class

SerDe クラスです。たとえば Parquet ファイルの場合、org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe を使用します。

使用例

この例では、OSS に格納されている vehicle.textfile ファイルから MaxCompute へデータをロードする方法を示します。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

操作手順

  1. OSS で: OSS コンソール にログインします。vehicle.textfile ファイルを、mc-load/data_location/ ディレクトリに、oss-cn-hangzhou リージョンのバケットに保存します。バケットの作成方法については、「バケットの作成」をご参照ください。バケット、リージョン、エンドポイントに基づいて OSS パスを以下のように構築します:

    oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-load/data_location/
  2. MaxCompute で: MaxCompute クライアント にログインし、ターゲットテーブルを作成して、LOAD 文を実行します。

    -- ターゲットテーブルを作成します。
    CREATE TABLE IF NOT EXISTS 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);
    
    -- LOAD 文を実行します。
    LOAD OVERWRITE TABLE ambulance_data_textfile_load_pt PARTITION(ds='20200910')
    FROM LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-load/data_location/'
    ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
    STORED AS TEXTFILE;
  3. 結果の確認: ターゲットテーブルをクエリして、インポートされたデータを確認します。

    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   |
    +------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+

Hologres データのインポート

Hologres の外部テーブルから、MaxCompute の内部テーブルへ直接データをロードできます。

  • 二重署名による権限付与:非対応です。

  • パーティションテーブル:Hologres のパーティションテーブルからのデータロードはできません。

構文

LOAD {OVERWRITE|INTO} TABLE <table_name> [PARTITION (<pt_spec>)]
FROM LOCATION <hologres_location>
STORED BY <StorageHandler>
[WITH SERDEPROPERTIES ('<property_name>'='<property_value>',...)];

主なパラメーター

パラメーター

説明

hologres_location

ソース Hologres テーブルの JDBC 接続文字列です。形式は次のとおりです:jdbc:postgresql://<endpoint>:<port>/<db>?table=<holo_table_name>

StorageHandler

組み込みストレージハンドラを指定します。このパラメーターは必ず com.aliyun.odps.jdbc.JdbcStorageHandler に設定してください。

SERDEPROPERTIES

以下のプロパティを含める必要があります:

  • 'odps.properties.rolearn':OSS へのアクセスに使用する RAM ロールの ARN です。

  • 'mcfed.mapreduce.jdbc.driver.class':必ず org.postgresql.Driver に設定してください。

  • 'odps.federation.jdbc.target.db.type'(値は必ず holo

使用例

この例では、Hologres の holo_2_mc テーブルから MaxCompute へデータをロードする方法を示します。ソーステーブルには、以下のデータが含まれています:

id | name
---|-----
1  | abc
2  | ereg

操作手順

  1. Hologres で: ソーステーブル holo_2_mc を作成し、そこにデータをロードします。

  2. MaxCompute で: MaxCompute クライアント にログインし、ターゲットテーブルを作成して、LOAD 文を実行します。

    -- ターゲットテーブルを作成します。
    CREATE TABLE IF NOT EXISTS mf_from_holo (
        id BIGINT,
        name STRING
    );
    
    -- LOAD 文を実行します。
    LOAD INTO TABLE mf_from_holo 
    FROM LOCATION 'jdbc:postgresql://hgprecn-cn-xxx-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::189273xxx:role/hologressrole',
      'mcfed.mapreduce.jdbc.driver.class'='org.postgresql.Driver', 
      'odps.federation.jdbc.target.db.type'='holo'
    );
    
  3. 結果の確認: ターゲット MaxCompute テーブルをクエリします。

    SELECT * FROM mf_from_holo;

    結果:

    +------------+------+
    | id         | name |
    +------------+------+
    | 1          | abc  |
    | 2          | ereg |
    +------------+------+