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

PolarDB:ローカルテーブルをOSSに並列にエクスポートする

最終更新日:May 28, 2024

ローカルテーブルをObject Storage Service (OSS) に並行してエクスポートできます。これにより、データエクスポートの効率が大幅に向上します。 このトピックでは、ローカルテーブルをOSSに並行してエクスポートする方法について説明します。

制限

  • クラスターは、リビジョンバージョンが8.0.1.1.38以降のEnterprise EditionPolarDB 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つの部分はスラッシュ (/) で区切られています。 現在のタスクの1つのパスに複数のスラッシュ (/) を含めることができます。 ファイルがOSSにアップロードされた後の完全なパスは、OSSサーバーパス + 現在のタスクのパスです。 エクスポートされるファイルの名前は、outfile_pathに含める必要があります。

table_name

マッピングテーブルを作成するテーブルの名前。

SQL文の前にヒントを追加して、データを並行してエクスポートできます。 または、弾性並列クエリ機能を有効にした後、SQLステートメントを直接実行してデータをエクスポートすることもできます。 エラスティック並列クエリ機能を有効にする方法の詳細については、「概要」をご参照ください。

次の例では、SELECT * FROM lineitem; ステートメントにヒントを追加して、ローカルテーブルをOSSにエクスポートする方法を説明します。

  1. 次のステートメントを実行して、現在の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文は並列に実行できます。

  2. データのエクスポート先の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_*"}; "*"
  3. 次のステートメントを実行して、結果が並行してエクスポートされる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に並列にエクスポートできます。

    • 実行計画で並列エクスポートがサポートされていない場合は、次のいずれかの方法を使用して原因を特定できます。

      1. OPTIMIZER_TRACEパラメーターをONに設定します。

        SET optimizer_trace="enabled=on";
      2. 次のステートメントを実行して、結果が並行してエクスポートされる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秒) 
      3. 次のステートメントを実行して、並行してエクスポートされる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パラメーターで確認できます。

  4. 次のステートメントを実行して、ローカルテーブルを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コマンドとエクスポートコマンドが同じノードで実行され、現在のノードでエクスポートコマンドによって占有されているメモリリソースに関する情報が照会されていることを確認します。