AnalyticDB for MySQL では、外部テーブルと `INSERT INTO` 文を使用して、AnalyticDB for MySQL Data Warehouse Edition (V3.0) から Object Storage Service (OSS) にデータをエクスポートできます。このエクスポート機能は、CSV および Parquet ファイル形式のみをサポートしています。
前提条件
-
AnalyticDB for MySQL からのデータ用に、Object Storage Service (OSS) にディレクトリを作成します。
-
説明
OSS バケットとご利用の AnalyticDB for MySQL Data Warehouse Edition (V3.0) クラスターは、同じリージョンにある必要があります。
-
例えば、OSS に
adb_data/という名前のディレクトリを作成します。AnalyticDB for MySQL Data Warehouse Edition (V3.0) からエクスポートされたデータは、このディレクトリに保存されます。
-
-
Data Warehouse Edition (V3.0) クラスターを作成し、そのホワイトリストを設定し、アカウントとデータベースを作成済みであること。詳細については、「AnalyticDB for MySQL クイックスタート」をご参照ください。
AnalyticDB for MySQL Data Warehouse Edition クラスターが弾性モードの場合、AnalyticDB for MySQL コンソールにログインして、ENI (Elastic Network Interface) ネットワークを有効にします。インスタンスの [ネットワーク情報] パネルで、[ENI ネットワーク] スイッチをオンにします。弾性モードのインスタンスが外部テーブルを使用してデータをインポートするには、ENI ネットワークを有効にする必要があります。
操作手順
この例では、AnalyticDB for MySQLデータウェアハウス版のadb_demoデータベースにあるsource_tableテーブルのデータを、OSS のadb_dataフォルダーにエクスポートします。
-
ターゲットクラスターに接続し、ソースデータベースに移動します。
-
adb_demoデータベースで、外部テーブルを作成します。詳細については、「非パーティション化 OSS 外部テーブル」をご参照ください。 -
書き込み文を実行して、ソースデータを以前に作成した外部テーブルにコピーします。さまざまな外部テーブルタイプでサポートされている構文については、「非パーティション化外部テーブルの構文」および「パーティション化外部テーブルの構文」をご参照ください。
-
手順3の書き込みジョブが完了したら、OSS コンソールにログインして、宛先フォルダー内のエクスポートされたデータファイルを表示します。また、AnalyticDB for MySQL から外部テーブルにエクスポートされたデータを直接クエリすることもできます。
非パーティション化外部テーブルの構文
INSERT INTO または INSERT OVERWRITE SELECT を使用してデータを書き込む場合、ジョブはデフォルトで同期的に実行されます。数百ギガバイトなどの大量のデータを書き込む場合、クライアントと AnalyticDB for MySQL サーバー間の接続がタイムアウトし、ジョブが失敗する可能性があります。したがって、大量のデータを書き込む場合は、文の前に SUBMIT JOB を追加して INSERT OVERWRITE SELECT 文を非同期的に実行することを推奨します。例:SUBMIT JOB INSERT OVERWRITE adb_table SELECT * FROM oss_table;。ジョブの非同期送信の詳細については、「非同期インポートジョブの送信」をご参照ください。
デフォルトでは、OSS にエクスポートされるファイルにはデータのみが含まれ、列ヘッダーは含まれません。列ヘッダー付きのファイルをエクスポートするには、文の前に /*+sql_output_oss_file_head_enable=true*/ ヒントを追加します。
-
INSERT SELECT FROM を使用した挿入
-
説明:データがすでに別のテーブルに存在する場合、
INSERT SELECT FROMを使用して外部テーブルにコピーできます。この文は、ソーステーブルから外部テーブルの OSS のロケーションにデータを書き込みます。各書き込み操作で、新しい OSS データファイルが生成されます。重要すべての列を外部テーブルに書き込む必要があります。列のサブセットのみを指定することはできません。
構文:
INSERT INTO table_name SELECT select_statement FROM from_statement;例:
insert into oss_table select col1, col2, col3 from source_table;
-
-
INSERT OVERWRITE SELECT を使用した挿入
-
説明:
INSERT OVERWRITE SELECTを使用して、テーブルに一括挿入を実行します。宛先外部テーブルにすでにデータが含まれている場合、この文はまず外部テーブルのパスにある既存のすべてのデータファイルを削除し、その後新しい OSS データファイルを生成します。重要すべての列を外部テーブルに書き込む必要があります。列のサブセットのみを指定することはできません。
構文:
INSERT OVERWRITE table_name SELECT select_statement FROM from_statement;例:
INSERT OVERWRITE oss_table SELECT col1, col2, col3 FROM source_table;
-
-
select fromの置換
-
説明:OSS 外部テーブルはプライマリキーをサポートしていないため、
REPLACE SELECT FROMはINSERT SELECT FROMと同じように動作します。データを別のテーブルにコピーします。宛先テーブルの既存のデータは変更されず、新しいデータが新しい OSS データファイルとして追加されます。
-
-
単一の OSS ファイルへのエクスポート (CSV 形式のみ、Parquet 形式は非対応)
-
説明:ヒントを使用して、指定された単一の OSS ファイルにデータをエクスポートできます。`OVERWRITE` キーワードが含まれている場合、外部テーブルの `TABLE_PROPERTIES` で定義されたディレクトリ内に同じ名前の既存ファイルがあれば上書きされます。ディレクトリ内の他のファイルは影響を受けません。
重要すべての列を外部テーブルに書き込む必要があります。列のサブセットのみを指定することはできません。
バージョンに関する注意:
-
V3.1.2 より前の AnalyticDB for MySQL クラスターの場合:この機能はサポートされていません。システムが自動的にファイル名を生成し、データを複数のファイルにエクスポートします。宛先ファイルの数は、ジョブの同時実行数によって動的に決定されます。
-
バージョン 3.1.2 以降の AnalyticDB for MySQL クラスターの場合、ヒントを使用して、AnalyticDB for MySQL の CSV 形式の通常の外部テーブルを OSS の単一ファイルにエクスポートできます。エクスポート中にファイル名をカスタマイズすることもできます。ヒントがない場合、エクスポートの動作はバージョン 3.1.2 より前のバージョンと同じで、データは複数のファイルにエクスポートされます。
構文:
/*+output_filename=adb.txt*/INSERT [OVERWRITE] table_name SELECT select_statement FROM from_statement;例:
/*+output_filename=adb.txt*/INSERT [OVERWRITE] oss_table SELECT * FROM source_table; -
-
パーティション化外部テーブルの構文
INSERT INTO または INSERT OVERWRITE SELECT を使用してデータを書き込む場合、ジョブはデフォルトで同期的に実行されます。数百ギガバイトなどの大量のデータを書き込む場合、クライアントと AnalyticDB for MySQL サーバー間の接続がタイムアウトし、ジョブが失敗する可能性があります。したがって、大量のデータを書き込む場合は、文の前に SUBMIT JOB を追加して INSERT OVERWRITE SELECT 文を非同期的に実行することを推奨します。例:SUBMIT JOB INSERT OVERWRITE adb_table SELECT * FROM oss_table;。ジョブの非同期送信の詳細については、「非同期インポートジョブの送信」をご参照ください。
デフォルトでは、OSS にエクスポートされるファイルにはデータのみが含まれ、列ヘッダーは含まれません。列ヘッダー付きのファイルをエクスポートするには、文の前に /*+sql_output_oss_file_head_enable=true*/ ヒントを追加します。
パーティションテーブルからデータを書き込む場合、データファイルにはパーティションキー列のデータは含まれません。パーティション情報は OSS のディレクトリ構造に保存されます。
パーティション化外部テーブルから単一の OSS ファイルへのデータのエクスポートはサポートされていません。
例えば、2つのパーティションキー列と3つの通常列を持つパーティションテーブルを考えます。第1レベルのパーティションキーは `pcol1` で値は `1`、第2レベルのパーティションキーは `pcol2` で値は `a` です。パーティションテーブルのデータは OSS パス adb_data/ にエクスポートされます。`pcol1=1` および `pcol2=a` のパーティションにデータを書き込むと、データファイルの相対パスは adb_data/pcol1=1/pcol2=a/ となります。結果として得られる CSV または Parquet データファイルには、`pcol1` と `pcol2` の値は含まれません。3つの通常列の値のみが含まれます。
-
SELECT の結果をパーティションに挿入
機能:INSERT INTO PARTITION SELECT FROM コマンドは、パーティション化外部テーブルにデータを一括挿入します。データを書き込む際、`PARTITION` 句を使用してすべてのパーティション列と値を指定できます。あるいは、高レベルのパーティション値のみを指定し、低レベルのパーティションを動的に生成させることもできます。`PARTITION` 句を完全に省略して、すべてのパーティションレベルを動的に生成することも可能です。
データが書き込まれると、対応するパーティションに追加されます。各書き込み操作で、新しい OSS データファイルが生成されます。
すべての列を外部テーブルに書き込む必要があります。列のサブセットのみを指定することはできません。
完全な静的パーティション
構文
INSERT INTO table_name PARTITION(par1=val1,par2=val2,...)
SELECT select_statement FROM from_statement;
例
INSERT INTO oss_table_par PARTITION(par1=val1,par2=val2)
select col1, col2, col3 FROM source_table;
部分的に静的かつ部分的に動的なパーティション
構文
INSERT INTO table_name PARTITION(par1=val1,par2,...)
SELECT select_statement FROM from_statement;
例
INSERT INTO oss_table_par PARTITION(par1=val1,par2)
SELECT col1, col2, col3, par2col FROM source_table;
完全な動的パーティション
構文
INSERT INTO table_name
SELECT select_statement FROM from_statement;
例
INSERT INTO oss_table_par
SELECT col1, col2, col3, par1col, par2col FROM source_table;
-
SELECT を使用したパーティションの上書き挿入
機能:使用方法は INSERT INTO PARTITION SELECT と同じです。ただし、このコマンドは実行に関与するターゲットパーティションから既存のデータファイルも削除します。新しいデータを受け取らないパーティションのデータファイルは削除されません。
構文:
INSERT OVERWRITE table_name PARTITION(par1=val1,par2=val2,...)[IF NOT EXISTS]
SELECT select_statement FROM from_statement;
例:
INSERT OVERWRITE oss_table_par PARTITION(par1=val1,par2=val2) IF NOT EXISTS
SELECT col1, col2, col3 FROM source_table;
-
SELECT FROM 句を使用したパーティションへの置換
説明:外部テーブルはプライマリキーをサポートしていないため、REPLACE INTO PARTITION SELECT FROM は INSERT INTO PARTITION SELECT FROM と同じように動作します。
サポートされていない構文
AnalyticDB for MySQL 外部テーブルは、行レベルの書き込み構文をサポートしていません。具体的には、INSERT INTO VALUES 文と REPLACE INTO VALUES 文はサポートされていません。