ローカルテーブルをObject Storage Service (OSS) に並行してエクスポートできます。これにより、データエクスポートの効率が大幅に向上します。 このトピックでは、ローカルテーブルをOSSに並行してエクスポートする方法について説明します。
制限
クラスターは、リビジョンバージョンが8.0.1.1.38以降のEnterprise EditionのPolarDB for MySQL 8.0.1クラスターである必要があります。
単一テーブルクエリの結果のみを並列にエクスポートできます。 マルチテーブルクエリと、Join、Order By、Group Byなどの複雑なクエリの結果を並行してエクスポートすることはできません。
読み取り専用ノードでエクスポートタスクを実行することを推奨します。
/* FORCE_SALVE */
ヒントをSQL文に追加するか、データをエクスポートするために読み取り専用ノードに直接接続できます。
Parameters
パラメーター | レベル | 説明 |
loose_oss_outfile_buffer_size | グローバル | 単一のossアウトファイルスレッドで使用できるメモリの量。 ほとんどの場合、スレッドがより多くのメモリを使用できる場合、エクスポート速度が向上します。 有効な値: 102400〜536870912。 デフォルト値: 134217728 単位:バイト |
使用法
構文
SELECT * FROM table_name INTO OSSOUTFILE 'outfile_path' COLUMNS TERMINATED BY '、' OPTIONALLY ENCLOSED BY '"' NULL_MARKER BY 'NULL' LINES TERMINATED BY'\n';
COLUMNS TERMINATED BY
: フィールド間の区切り文字。OPTIONALLY ENCLOSED BY
: フィールドの両端の識別子。 OPTIONALLYが追加された後は、string型のフィールドの両端にのみ識別子が追加されます。 それ以外の場合、すべての型のフィールドの両端に識別子が追加されます。NULL_MARKER BY
: NULL値がテキストとしてエクスポートされることを示す文字。 NULLの出力値は、次のメソッドで定义できます。NULL_MARKER: NULLの出力値を直接定義します。
NULL_MARKER
は任意の値として定義できます。 このメソッドが最も優先度が高い。ESCAPED BY: 1文字のみ使用できます。 NULLの出力値は、Nが続く文字である。たとえば、
ESCAPED BY '\'
は、NULLの出力値が \Nであることを意味します。 このメソッドは2番目の優先順位を持ちます。NULL: 上記の2つのメソッドのどちらも定義されていない場合、NULLの出力値はデフォルトでNULLの文字列になります。 このメソッドの優先度は最低です。 NULLには、両側に
ENCLOSED
識別子はありません。
LINES TERMINATED BY: 行间の区切り文字。
詳細については、「MySQLドキュメント」をご参照ください。
Parameters
パラメーター | 説明 |
outfile_path | ファイルのOSSディレクトリ。 それは次の部品を含んでいます:
前の3つの部分はスラッシュ ( |
table_name | マッピングテーブルを作成するテーブルの名前。 |
例
SQL文の前にヒントを追加して、データを並行してエクスポートできます。 または、弾性並列クエリ機能を有効にした後、SQLステートメントを直接実行してデータをエクスポートすることもできます。 エラスティック並列クエリ機能を有効にする方法の詳細については、「概要」をご参照ください。
次の例では、SELECT * FROM lineitem;
ステートメントにヒントを追加して、ローカルテーブルをOSSにエクスポートする方法を説明します。
次のステートメントを実行して、現在のSQLステートメントを並列実行できるかどうかを確認します。
EXPLAIN SELECT /* + parallel(4)*/ * FROM lineitem;
サンプル結果:
------------- ------------------------------------------------------------------------------------ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | ---- ----------- ----------------------------------------------------------------------------------------------------------------- | 1 | SIMPLE | <gather1> | NULL | ALL | NULL | NULL | NULL | NULL | 5392844 | 100.00 | NULL | | 1 | SIMPLE | lineitem | NULL | ALL | NULL | NULL | NULL | NULL | 1348211 | 100.00 | 並列スキャン (4ワーカー) | ---- ----------- ----------------------------------------------------------------------------------------------------------------- セットで2行、1警告 (0.05秒)
Extra列に "Parallel scan" という値が含まれている場合、現在のSQL文は並列に実行できます。
データのエクスポート先のOSSサーバーを作成します。 この例では、
outserver
という名前のサーバーが作成されます。CREATE SERVERアウトサーバーFOREIGN DATA WRAPPER oss OPTIONS ( EXTRA_SERVER_INFO '{"oss_endpoint": "oss_bucket": "polardb", "oss_access_key_id": "********" 、"oss_access_key_secret": "**"" "" 0_*"}; "*"
次のステートメントを実行して、結果が並行してエクスポートされるSQLステートメントの実行計画を表示し、ローカルテーブルを並行してOSSにエクスポートできるかどうかを判断します。
EXPLAIN SELECT /* + parallel(4)*/ * ラインアイテムからOSSOUTFILE 'outserver/t1.CSV 'COLUMNS TERMINATED BY' 、'OPTIONALLY ENCLOSED BY' "'NULL_MARKER BY 'NULL' LINES TERMINATED BY'\n';
この例では、次の実行プランが返されます。
------------- ------------------------------------------------------------------------------------ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | ---- ----------- ----------------------------------------------------------------------------------------------------------------- | 1 | SIMPLE | <gather1> | NULL | ALL | NULL | NULL | NULL | NULL | 5805759 | 100.00 | 並列エクスポートOSSアウトファイル | | 1 | SIMPLE | lineitem | NULL | ALL | NULL | NULL | NULL | NULL | NULL | 1451439 | 100.00 | Parallel scan (4ワーカー); Parallel export OSS outfile | ---- ----------- ----------------------------------------------------------------------------------------------------------------- セットの2列、1警告 (0.03秒)
実行プランのExtra列に値「
Parallel export OSS outfile
」が含まれている場合、ローカルテーブルをOSSに並列にエクスポートできます。実行計画で並列エクスポートがサポートされていない場合は、次のいずれかの方法を使用して原因を特定できます。
OPTIMIZER_TRACE
パラメーターをONに設定します。SET optimizer_trace="enabled=on";
次のステートメントを実行して、結果が並行してエクスポートされるSQLステートメントの実行計画を表示します。
EXPLAIN SELECT /* + parallel(4)*/ * FROM lineitem WHERE l_orderkey < 100 INTO OSSOUTFILE 'default_oss_server/t1' COLUMNS TERMINATED BY '、' OPTIONALLY ENCLOSED BY '"' NULL_MARKER BY 'LINTERMINATED'\n';
サンプル結果:
------------- --------------------------------------------------------------------------------- | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | ---- ------------ --------------------------------------------------------------------------------------------------------------------------- | 1 | SIMPLE | <gather1> | NULL | ALL | NULL | NULL | NULL | NULL | 105 | 100.00 | NULL | | 1 | SIMPLE | lineitem | NULL | range | PRIMARY,i_l_orderkey | PRIMARY | 4 | NULL | 26 | 100.00 | Parallel scan (4 workers); Using where | ---- ------------ --------------------------------------------------------------------------------------------------------------------------- セットの2列、1警告 (0.00秒)
次のステートメントを実行して、並行してエクスポートされるSQLステートメントのオプティマイザートレースを表示します。
SELECT * からINFORMATION_SCHEMA.OPTIMIZER_TRACE;
サンプル結果:
``` "considered_parallel_outfile": { "choose": false、 "storage": "OSS" 、 "format": "CSV" 、 "mean_outfile_record_length": "79 B" 、 "estimate_single_worker_outfile_size": "8 KB" 、 "cause": "各ワーカーによって書き込まれたデータは1024 KB (pq_oss_min_worker_write_size) を超えている必要があります。 } } ```
並列エクスポートがサポートされていない理由は、実行結果の
cause
パラメーターで確認できます。
次のステートメントを実行して、ローカルテーブルをOSSに並行してエクスポートします。
SELECT /* + parallel(4)*/ * ラインアイテムからOSSOUTFILE 'outserver/t1.CSV 'COLUMNS TERMINATED BY' 、'オプションでENCLOSED BY' "'NULL_MARKER BY 'NULL' LINES TERMINATED BY'\n';
データのエクスポート中に、次のステートメントを実行して、現在のエクスポートタスクが占有しているメモリの総量とスレッドの総数をリアルタイムで表示できます。
エクスポートタスクが占有しているメモリの総量をリアルタイムで表示します。 単位:バイト
「 % Oss_outfile_memory_used % 」のようなステータスを表示します。
エクスポートタスクが占有しているスレッドの総数をリアルタイムで表示します。
「 % Oss_outfile_threads_running % 」のようなステータスを表示します。
説明クラスターエンドポイントに接続してエクスポートタスクを実行するときは、
SHOW STATUS
コマンドとエクスポートコマンドが同じノードで実行され、現在のノードでエクスポートコマンドによって占有されているメモリリソースに関する情報が照会されていることを確認します。