MaxComputeでは、MaxComputeプロジェクトからObject Storage Service (OSS) やHologresなどの外部データストアにデータをエクスポートできます。 このように、他の計算エンジンは、MaxComputeから外部データストアにエクスポートされたデータを使用できます。 このトピックでは、UNLOADステートメントの使用方法と関連する例について説明します。
次のプラットフォームでステートメントを実行できます。
概要
MaxComputeでは、UNLOAD
ステートメントを実行して、MaxComputeから外部データストアOSSまたはHologresにデータをエクスポートできます。 OSSは、CSV形式または別のオープンソース形式でデータを保存できます。 以下の点に注意する必要があります。
MaxComputeデータは、Amazon RedshiftやBigQueryなどの他のコンピューティングエンジンにデータをエクスポートする前に、OSSにエクスポートする必要があります。
データを繰り返しエクスポートしても、以前にエクスポートしたファイルは上書きされません。 代わりに、新しいファイルが生成される。
制限事項
UNLOADステートメントの使用には、次の制限があります。
MaxComputeは、OSSにエクスポートされたファイルを複数の部分に自動的に分割し、ファイルの名前を生成します。 エクスポートされたファイルにカスタム名またはファイル名拡張子を指定することはできません。
MaxComputeからHologresにデータをエクスポートする場合、デュアル署名認証はサポートされていません。
MaxComputeからパーティションHologresテーブルにデータをエクスポートすることはできません。
オープンソース形式でエクスポートされたファイルにファイル名拡張子を追加することはできません。
注意事項
UNLOADステートメントは課金されません。 UNLOADステートメントのサブクエリ句は、データをスキャンし、結果を計算するためにコンピューティングリソースを使用する必要があります。 したがって、サブクエリ句は一般的なSQLジョブとして課金されます。
一部のシナリオでは、構造化データをOSSに保存して、ストレージコストを削減できます。 ただし、事前にコストを見積もる必要があります。
MaxComputeストレージ料金は
GB月あたりUSD 0.018。 ストレージ料金の詳細については、「」をご参照ください。 ストレージ価格 (従量課金) 。 MaxComputeにインポートされるデータのデータ圧縮率は約5:1です。 圧縮後のデータのサイズに基づいて課金されます。
OSSの標準ストレージクラスを使用してデータを保存する場合、単価は
GB月あたりUSD 0.018。 低頻度アクセス (IA) 、アーカイブ、およびコールドアーカイブのストレージクラスの料金の詳細については、「ストレージ料金」をご参照ください。
ストレージコストを削減するためにデータをエクスポートする場合は、データ機能テストに基づいてデータ圧縮率を見積もり、データのエクスポート時に使用されたクエリ文に基づいてUNLOAD文を使用するコストを見積もり、エクスポートされたデータへのアクセス方法を評価することをお勧めします。 これにより、不要なデータ移行による追加コストを防ぐことができます。
前提条件
操作アカウントにMaxComputeの関連する権限が付与されています。
アカウントを使用して
UNLOAD
ステートメントを実行する前に、MaxComputeプロジェクトでエクスポートするテーブルからデータを読み取るSELECTアクセス許可がアカウントにあることを確認してください。 権限を付与する方法の詳細については、「MaxCompute権限」をご参照ください。操作アカウントには、関連する外部データストアに対する必要な権限が付与されます。
アカウントを使用してMaxComputeから外部データストアOSSまたはHologresにデータをエクスポートする前に、MaxComputeから外部データストアにアクセスする権限をアカウントに付与する必要があります。
UNLOAD
文の承認モードは、MaxCompute外部テーブルの承認モードと同じです。 以下のセクションでは、MaxComputeがOSSおよびHologresにアクセスする権限を付与する方法について説明します。MaxComputeによるOSSへのアクセス許可
ワンクリック認証を実行して、より高いセキュリティを実現できます。 詳細については、「STS権限付与」をご参照ください。
説明次の例では、ワンクリック認証が使用され、ロール名はAliyunODPSDefaultRoleです。
MaxComputeにHologresへのアクセスを許可する
RAMロールを作成し、RAMロールにMaxComputeへのアクセス権限を付与してから、そのRAMロールをHologresインスタンスに追加して承認を完了できます。 詳細については、「STSモードでのHologres外部テーブルの作成」をご参照ください。
上記の権限付与が完了したら、エクスポートするデータの形式に基づいてエクスポート方法を選択する必要があります。
組み込みのエクストラクタを使用してデータをエクスポートする
構文
unload from {<select_statement>|<table_name> [partition (<pt_spec>)]} into location <external_location> stored by <StorageHandler> [with serdeproperties ('<property_name>'='<property_value>',...)];
パラメーター
MaxComputeからOSSへのデータのエクスポート
select_statement: ソーステーブルからターゲットOSSディレクトリに挿入するデータを照会するために使用される
SELECT
句。 ソーステーブルは、パーティションテーブルまたは非パーティションテーブルにすることができます。SELECT
句の詳細については、「SELECT構文」をご参照ください。table_nameおよびpt_spec: テーブル名またはテーブル名とパーティション名の組み合わせを使用して、エクスポートするデータを指定できます。 このエクスポートメソッドは、クエリ文を自動的に生成しません。 したがって、料金は発生しません。 pt_specの値は、
(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...)
形式です。external_location: 必須です。 データをエクスポートするOSSディレクトリ。 このパラメーターの値は、
'oss://<oss_endpoint>/<object>'
OSSディレクトリの詳細については、「OSSドメイン名」をご参照ください。StorageHandler: 必須です。 使用される組み込みストレージハンドラの名前。 有効な値:
com.aliyun.odps.CsvStorageHandler
およびcom.aliyun.odps.TsvStorageHandler
このパラメータは、CSVおよびTSVファイルを処理する組み込みストレージハンドラを指定し、CSVおよびTSVファイルの読み取りまたは書き込み方法を定義します。 ビジネス要件に基づいてこのパラメーターのみを指定する必要があります。 関連する論理は、システムによって実装される。 組み込みのストレージハンドラーを使用してデータをエクスポートする場合、ファイル名拡張子. csv
または. tsv
がエクスポートされたファイルの名前に自動的に追加されます。 このパラメーターの設定は、MaxCompute外部テーブルの設定と同じです。 詳細については、「OSS外部テーブルの作成」をご参照ください。<property_name>'='<property_value>': オプション。 properties_nameはプロパティの名前を指定し、properties_valueはプロパティの値を指定します。 この句は、MaxCompute外部テーブルに使用するのと同じ方法で使用できます。 プロパティの詳細については、「OSS外部テーブルの作成」をご参照ください。
MaxComputeからHologresへのデータのエクスポート
select_statement: ソーステーブルから宛先Hologresディレクトリに挿入するデータを照会するために使用される
SELECT
句。 ソーステーブルは、非パーティションテーブルのみにすることができます。SELECT
句の詳細については、「SELECT構文」をご参照ください。table_name: テーブル名を使用して、エクスポートするデータを指定できます。 このエクスポートメソッドは、クエリ文を自動的に生成しません。 したがって、料金は発生しません。
external_location: 必須です。 データをエクスポートするHologresディレクトリ。 このパラメーターの値は、
'jdbc:postgresql://<endpoint >:< port>/<database>?ApplicationName=MaxCompute&[currentSchema=<schema>&][useSSL={true | false}&]table=<holo_table_name>/'
形式です。 Hologresディレクトリの詳細については、「構文」をご参照ください。StorageHandler: 必須です。 使用される組み込みストレージハンドラの名前。 値を
com.aliyun.odps.jdbc.JdbcStorageHandler
に設定します。 この値は、JdbcStorageHandlerを使用してHologres外部テーブルにアクセスすることを示します。<property_name>'='<property_value>': 必須です。 property_nameは、プロパティの名前を指定します。 property_valueは、プロパティの値を指定します。 データをHologresにエクスポートするときは、次のパラメーターを設定する必要があります。
'odps.properties.rolearn'='<ram_arn>': 指定されたRAMロールのAlibaba Cloudリソース名 (ARN) を指定します。 ARNは、Security Token Service (STS) 認証に使用されます。 指定されたRAMロールのARNを取得するには、次の手順を実行します。 [ロール] ページで、ARNを照会するRAMロールを見つけ、[ロール名] 列のRAMロール名をクリックします。 表示されるページで、[基本情報] セクションでARNを表示します。
'mcfed.mapreduce.jdbc.driver.class'='org.postgresql.Driver': Hologresデータベースへの接続に使用されるドライバを指定します。 値を
org.postgresql.Driver
に設定します。'odps.federation.jdbc.tar get.db.type'='holo': ドライバが接続されているデータベースのタイプを指定します。 値を
holo
に設定します。
Hologresでサポートされているプロパティは、MaxCompute外部テーブルのプロパティと同じです。 プロパティの詳細については、「構文」をご参照ください。
例
MaxComputeからOSSへのデータのエクスポート
この例では、sale_detailテーブルのデータをMaxComputeプロジェクトからOSSにエクスポートする方法を示します。 sale_detailテーブルには、次のデータが含まれます。
+------------+-------------+-------------+------------+------------+ | shop_name | customer_id | total_price | sale_date | region | +------------+-------------+-------------+------------+------------+ | s1 | c1 | 100.1 | 2013 | china | | s2 | c2 | 100.2 | 2013 | china | | s3 | c3 | 100.3 | 2013 | china | | null | c5 | NULL | 2014 | shanghai | | s6 | c6 | 100.4 | 2014 | shanghai | | s7 | c7 | 100.5 | 2014 | shanghai | +------------+-------------+-------------+------------+------------+
OSS コンソールにログインします。 次に、
OSS-cn-hangzhou
リージョンのossバケットにmc-unload/data_location/
ディレクトリを作成し、OSSディレクトリを整理します。 OSSバケットの作成方法の詳細については、「バケットの作成」をご参照ください。次のOSSディレクトリは、バケット、リージョン、エンドポイントに基づいて編成されています。
oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-unload/data_location
MaxComputeクライアントにログインし、UNLOADステートメントを実行して、sale_detailテーブルからOSSにデータをエクスポートします。 次の例を示します。
例1: sale_detailテーブルのデータをCSVファイルとしてエクスポートし、そのファイルをGZIPファイルにパッケージ化します。 サンプル文:
-- Control the number of exported files: Set the size of data in the MaxCompute internal table read by a single worker. Unit: MB. The MaxCompute table is compressed before you export the table. The size of the exported data is about four times the data size before the export. set odps.stage.mapper.split.size=256; -- Export data. unload from (select * from sale_detail) into location 'oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-unload/data_location' stored by 'com.aliyun.odps.CsvStorageHandler' with serdeproperties ('odps.properties.rolearn'='acs:ram::139699392458****:role/AliyunODPSDefaultRole', 'odps.text.option.gzip.output.enabled'='true'); -- The preceding statements are equivalent to the following statements: set odps.stage.mapper.split.size=256; unload from sale_detail into location 'oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-unload/data_location' stored by 'com.aliyun.odps.CsvStorageHandler' with serdeproperties ('odps.properties.rolearn'='acs:ram::139699392458****:role/AliyunODPSDefaultRole', 'odps.text.option.gzip.output.enabled'='true');
例2: sale_detailテーブルのパーティション (sale_date='2013' 、region='china') からTSVファイルとしてOSSにデータをエクスポートし、そのファイルをGZIPファイルにパッケージ化します。
-- Control the number of exported files: Set the size of data in the MaxCompute internal table read by a single worker. Unit: MB. The MaxCompute table is compressed before you export the table. The size of the exported data is about four times the data size before the export. set odps.stage.mapper.split.size=256; -- Export data. unload from sale_detail partition (sale_date='2013',region='china') into location 'oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-unload/data_location' stored by 'com.aliyun.odps.TsvStorageHandler' with serdeproperties ('odps.properties.rolearn'='acs:ram::139699392458****:role/AliyunODPSDefaultRole', 'odps.text.option.gzip.output.enabled'='true');
'odps.text.option.gzip.output.enabled='true'
は、エクスポートされたファイルがGZIPファイルに圧縮されることを指定します。 GZIP形式のみがサポートされています。OSSコンソールにログインして、インポート先のOSSディレクトリにインポート結果を表示します。
例1のインポート結果
例2のインポート結果
MaxComputeからHologresへのデータのエクスポート
この例では、MaxComputeプロジェクトの
data_test
テーブルからHologresにデータをエクスポートする方法を示します。data_test
テーブルには、次のデータが含まれています。+------------+------+ | id | name | +------------+------+ | 3 | rgege | | 4 | Gegegegr | +------------+------+
データを書き込む
mc_2_holo
という名前のHologresテーブルを作成します。 テーブルが属するデータベースの名前はtest
です。 次のテーブル作成ステートメントは、HoloWebコンソールのSQLエディターで実行できます。 詳細については、「HoloWebに接続してクエリを実行する」をご参照ください。 例:説明データを書き込むテーブルのフィールドのデータ型は、MaxComputeテーブルのフィールドのデータ型と同じである必要があります。 詳細については、「MaxComputeとHologres間のデータ型マッピング」をご参照ください。
create table mc_2_holo (id int, name text);
MaxComputeクライアントにログインし、UNLOADステートメントを実行して、
data_test
テーブルからHologresにデータをエクスポートします。 サンプル文:unload from (select * from data_test) into location 'jdbc:postgresql://hgprecn-cn-5y**********-cn-hangzhou-internal.hologres.aliyuncs.com:80/test?ApplicationName=MaxCompute¤tSchema=public&useSSL=false&table=mc_2_holo/' stored by 'com.aliyun.odps.jdbc.JdbcStorageHandler' with serdeproperties ( 'odps.properties.rolearn'='acs:ram::13**************:role/aliyunodpsholorole', 'mcfed.mapreduce.jdbc.driver.class'='org.postgresql.Driver', 'odps.federation.jdbc.target.db.type'='holo' );
エクスポートされたデータをHologresで照会します。
SELECT * FROM mc_2_holo;
次の応答が返されます。
id name 4 Gegegegr 3 rgege
別のオープンソース形式でデータをエクスポートする
構文
unload from {<select_statement>|<table_name> [partition (<pt_spec>)]} into location <external_location> [row format serde '<serde_class>' [with serdeproperties ('<property_name>'='<property_value>',...)] ] storeds as <file_format> [properties('<tbproperty_name>'='<tbproperty_value>')];
パラメーター
select_statement: ソーステーブルからターゲットOSSディレクトリに挿入するデータを照会するために使用される
SELECT
句。 ソーステーブルは、パーティションテーブルまたは非パーティションテーブルにすることができます。SELECT
句の詳細については、「SELECT構文」をご参照ください。table_nameおよびpt_spec: テーブル名またはテーブル名とパーティション名の組み合わせを使用して、エクスポートするデータを指定できます。 このエクスポートメソッドは、クエリ文を自動的に生成しません。 したがって、料金は発生しません。 pt_specの値は、
(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...)
形式です。external_location: 必須です。 データをエクスポートするOSSディレクトリ。 このパラメーターの値は、
'oss://<oss_endpoint>/<object>'
OSSディレクトリの詳細については、「OSSドメイン名」をご参照ください。serde_class: オプション。 このパラメーターの設定は、MaxCompute外部テーブルの設定と同じです。 詳細については、「OSS外部テーブルの作成」をご参照ください。
'<property_name>'='<property_value>': オプション。 properties_nameはプロパティの名前を指定し、properties_valueはプロパティの値を指定します。 この句は、MaxCompute外部テーブルに使用するのと同じ方法で使用できます。 プロパティの詳細については、「OSS外部テーブルの作成」をご参照ください。
file_format: 必須です。 エクスポートされたファイルの形式 (ORC、PARQUET、RCFILE、SEQUENCEFILE、TEXTFILEなど) 。 このパラメーターの設定は、MaxCompute外部テーブルの設定と同じです。 詳細については、「OSS外部テーブルの作成」をご参照ください。
'<tbproperty_name>'='<tbproperty_value>': オプション。 tbproperty_nameは、外部テーブルの拡張情報内のプロパティの名前を指定します。 tbproperties_valueは、外部テーブルの拡張情報内のプロパティの値を指定します。 たとえば、オープンソースデータをSNAPPYまたはLZO圧縮形式のファイルとしてエクスポートできます。
'mcfed .parquet.com pression'='SNAPPY'
または'mcfed .parquet.com pression'='LZO'
を設定できます。
例
この例では、sale_detailテーブルのデータをMaxComputeプロジェクトからOSSにエクスポートする方法を示します。 sale_detailテーブルには、次のデータが含まれます。
+------------+-------------+-------------+------------+------------+ | shop_name | customer_id | total_price | sale_date | region | +------------+-------------+-------------+------------+------------+ | s1 | c1 | 100.1 | 2013 | china | | s2 | c2 | 100.2 | 2013 | china | | s3 | c3 | 100.3 | 2013 | china | | null | c5 | NULL | 2014 | shanghai | | s6 | c6 | 100.4 | 2014 | shanghai | | s7 | c7 | 100.5 | 2014 | shanghai | +------------+-------------+-------------+------------+------------+
OSS コンソールにログインします。 次に、
OSS-cn-hangzhou
リージョンのossバケットにmc-unload/data_location/
ディレクトリを作成し、OSSディレクトリを整理します。 OSSバケットの作成方法の詳細については、「バケットの作成」をご参照ください。次のOSSディレクトリは、バケット、リージョン、エンドポイントに基づいて編成されています。
oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-unload/data_location
MaxComputeクライアントにログインし、UNLOADステートメントを実行して、sale_detailテーブルからOSSにデータをエクスポートします。 次の例を示します。
例1: sale_detailテーブルのデータをPARQUET形式のファイルとしてエクスポートし、Snappyを使用してファイルを圧縮します。 サンプル文:
-- Control the number of exported files: Set the size of data in the MaxCompute internal table read by a single worker. Unit: MB. The MaxCompute table is compressed before you export the table. The size of the exported data is about four times the data size before the export. set odps.stage.mapper.split.size=256; -- Export data. unload from (select * from sale_detail) into location 'oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-unload/data_location' row format serde 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' with serdeproperties ('odps.properties.rolearn'='acs:ram::139699392458****:role/AliyunODPSDefaultRole') stored as parquet properties('mcfed.parquet.compression'='SNAPPY');
例2: sale_detailテーブルのパーティション (sale_date='2013' 、region='china') からPARQUETファイルとしてOSSにデータをエクスポートし、Snappyを使用してファイルを圧縮します。 サンプル文:
-- Control the number of exported files: Set the size of data in the MaxCompute internal table read by a single worker. Unit: MB. The MaxCompute table is compressed before you export the table. The size of the exported data is about four times the data size before the export. set odps.stage.mapper.split.size=256; -- Export data. unload from sale_detail partition (sale_date='2013',region='china') into location 'oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-unload/data_location' row format serde 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' with serdeproperties ('odps.properties.rolearn'='acs:ram::139699392458****:role/AliyunODPSDefaultRole') stored as parquet properties('mcfed.parquet.compression'='SNAPPY');
OSSコンソールにログインして、インポート先のOSSディレクトリにインポート結果を表示します。
例1のインポート結果
例2のインポート結果
説明エクスポートされたデータがSnappyまたはLZOを使用して圧縮されている場合、ファイル名拡張子。きびきびとしたり。エクスポートしたファイルのlzoは表示できません。
エクスポートされたファイルのプレフィックスを指定し、ファイル名拡張子を表示します。
UNLOAD
文を実行してMaxComputeテーブルからデータをファイルとしてエクスポートする場合、特定のビジネスシナリオでは、ファイルのプレフィックスを指定し、ファイル名拡張子を表示する必要があります。 次の操作を実行して、プレフィックスを指定し、ファイル名拡張子を表示できます。
構文
組み込みのエクストラクターを使用して、CSVまたはTSVファイルをエクスポートします。
-- Use a built-in extractor to export a CSV or TSV file. unload from {<select_statement>|<table_name> [partition (<pt_spec>)]} into location <external_location> [stored by <StorageHandler>] [with serdeproperties ('<property_name>'='<property_value>',...)];
odps.external.data.prefixプロパティを設定して、カスタムプレフィックスを指定できます。 値の長さは最大10文字です。
odps.external.data.enable.extensionプロパティを
true
に設定して、ファイル名の拡張子を表示できます。その他のパラメーターの詳細については、「組み込みのエクストラクタを使用したデータのエクスポート」をご参照ください。
ORCやParquetなどのオープンソース形式でファイルをエクスポートします。
unload from {<select_statement>|<table_name> [partition (<pt_spec>)]} into location <external_location> [row format serde '<serde_class>' [with serdeproperties ('<property_name>'='<property_value>',...)] ] storeds as <file_format> [properties('<tbproperty_name>'='<tbproperty_value>')];
odps.external.data.prefixプロパティを設定して、カスタムプレフィックスを指定できます。 値の長さは最大10文字です。
odps.external.data.enable.extensionプロパティを
true
に設定して、ファイル名の拡張子を表示できます。その他のパラメーターの詳細については、「別のオープンソース形式でのデータのエクスポート」をご参照ください。
ファイル名拡張子の説明
ファイル形式
SerDe
エクステンション
SEQUENCEFILE
org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
. sequencefile
TEXTFILE
org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
. txt
RCFILE
org.apache.hadoop.hive. serde2.columnary. LazyBinaryColumnarSerDe
. rcfile
ORC
org.apache.hadoop.hive.ql.io.orc.OrcSerde
. orc
PARQUET
org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe
.parquet
AVRO
org.apache.hadoop.hive.serde2.avro.AvroSerDe
. avro
JSON
org.apache.hive.hcatalog.data.JsonSerDe
. json
CSV
org.apache.hadoop.hive.serde2.OpenCSVSerde
.csv
例
TXTファイルをエクスポートします。
mf_
プレフィックスを追加して表示します。txt拡張子。set odps.sql.hive.compatible=true; set odps.sql.split.hive.bridge=true; unload from (select col_tinyint,col_binary from mf_fun_datatype limit 1) into location 'oss://oss-cn-beijing-internal.aliyuncs.com/mfosscostfee/demo6/' stored as textfile properties ('odps.external.data.prefix'='mf_', 'odps.external.data.enable.extension'='true');
指定されたデータストアの宛先OSSディレクトリにエクスポート結果を表示します。
CSVファイルをエクスポートします。
mf_
プレフィックスを追加して表示します。csv拡張子。set odps.sql.hive.compatible=true; set odps.sql.split.hive.bridge=true; unload from (select col_tinyint,col_binary from mf_fun_datatype limit 2) into location 'oss://oss-cn-beijing-internal.aliyuncs.com/mfosscostfee/demo6/' stored by 'com.aliyun.odps.CsvStorageHandler' properties ('odps.external.data.prefix'='mf_', 'odps.external.data.enable.extension'='true');
指定されたデータストアの宛先OSSディレクトリにエクスポート結果を表示します。
関連ドキュメント
CSV形式または別のオープンソース形式のデータを外部データストアからMaxComputeにインポートする場合は、「LOAD」をご参照ください。