LOAD 文を使用して、外部データストア(例:OSS、Hologres、Amazon Redshift、BigQuery)から MaxCompute のテーブルまたはパーティションにデータをロードします。
概要
MaxCompute では、LOAD OVERWRITE または LOAD INTO コマンドを使用して、CSV やその他のオープンソース形式のデータを、Hologres、Object 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
Hologres
サンプル
OSS
このサンプルでは、組み込みエクストラクター(StorageHandler)を使用したデータロード方法を示します。MaxCompute と OSS が同一の Alibaba Cloud アカウントによって所有されていることを前提としており、Alibaba Cloud の内部ネットワークを介して vehicle.csv ファイルを MaxCompute にロードする方法を説明します。
ワンクリック権限付与をクリックします。
vehicle.csv ファイルを、
mc-test/data_location/ディレクトリに保存します。このディレクトリは、oss-cn-hangzhouリージョンの OSS バケット内にあります。その後、OSS ディレクトリパスを構築します。「バケットの作成」をご参照ください。OSS ディレクトリパスは、バケット、リージョン、エンドポイント情報から次のように構築されます:
oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-test/data_location/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 );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 ロールの表示」をご参照ください。
対象テーブル
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
シナリオ
Hologres インスタンスおよびデータベースが作成済みであり、データベース内にテーブルも作成済みです。
MaxCompute 内に Hologres 外部テーブルが作成済みです。この外部テーブルを使用して、Hologres テーブルのデータをクエリできます。
-- Hologres 外部テーブルをクエリ: SELECT * FROM holo_ext; -- 次の結果が返されます: +------------+------+ | id | name | +------------+------+ | 1 | abc | | 2 | ereg | +------------+------+次のサンプルでは、LOAD コマンドを使用して、この Hologres テーブルから MaxCompute の内部テーブルにデータをロードする方法を示します。
MaxCompute の内部テーブルを作成します。
-- 内部テーブルを作成します。 CREATE TABLE from_holo(id BIGINT, name STRING);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¤tSchema=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' );
テーブルをクエリして結果を確認します。
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>;パラメーター
サンプル
同一アカウント
同一アカウント所有
このサンプルでは、Alibaba Cloud の内部ネットワークを介して vehicle.textfile ファイルを MaxCompute にロードする方法を示します。
MaxCompute と OSS が異なる Alibaba Cloud アカウントによって所有されている場合は、「STS モードでの権限付与」をご参照ください。
ワンクリック権限付与をクリックします。
vehicle.textfile ファイルを、
mc-test/data_location/ディレクトリに保存します。このディレクトリは、oss-cn-hangzhouリージョンの OSS バケット内にあります。その後、OSS ディレクトリパスを構築します。「バケットの作成」をご参照ください。OSS ディレクトリパスは、バケット、リージョン、エンドポイント情報から次のように構築されます:
oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-test/data_location/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 );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;対象テーブル 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/ のようなパーティションキーと値のペアに基づいている場合、動的パーティションを使用してデータをロードできます。
ワンクリック権限付与をクリックします。
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/'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 );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;対象テーブル
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 内のソースオブジェクトへのパスです。形式は |
| 組み込みストレージハンドラを指定します:
|
| SerDe(Serializer/Deserializer)のプロパティを指定します:
|
例
例 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操作手順:
OSS で: OSS コンソール にログインします。
vehicle.csvファイルを、oss-cn-hangzhouリージョンのバケット内のmc-load/data_location/ディレクトリに保存します。バケットの作成方法については、「バケットの作成」をご参照ください。バケット、リージョン、エンドポイントに基づいて OSS パスを以下のように構築します:oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-load/data_location/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'=',' );結果の確認: ターゲットテーブルをクエリします。
-- 全表スキャンを有効化します(現在のセッションのみ有効)。 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操作手順:
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/'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;結果の確認: ターゲットテーブルにインポートされたデータを表示します。
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 内のソースオブジェクトへのパスです。形式は |
| ファイル形式です。サポートされる形式には |
| SerDe クラスです。たとえば Parquet ファイルの場合、 |
使用例
この例では、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操作手順:
OSS で: OSS コンソール にログインします。
vehicle.textfileファイルを、mc-load/data_location/ディレクトリに、oss-cn-hangzhouリージョンのバケットに保存します。バケットの作成方法については、「バケットの作成」をご参照ください。バケット、リージョン、エンドポイントに基づいて OSS パスを以下のように構築します:oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-load/data_location/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;結果の確認: ターゲットテーブルをクエリして、インポートされたデータを確認します。
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 テーブルの JDBC 接続文字列です。形式は次のとおりです: |
| 組み込みストレージハンドラを指定します。このパラメーターは必ず |
| 以下のプロパティを含める必要があります:
|
使用例
この例では、Hologres の holo_2_mc テーブルから MaxCompute へデータをロードする方法を示します。ソーステーブルには、以下のデータが含まれています:
id | name
---|-----
1 | abc
2 | ereg操作手順:
Hologres で: ソーステーブル
holo_2_mcを作成し、そこにデータをロードします。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¤tSchema=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' );結果の確認: ターゲット MaxCompute テーブルをクエリします。
SELECT * FROM mf_from_holo;結果:
+------------+------+ | id | name | +------------+------+ | 1 | abc | | 2 | ereg | +------------+------+