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

PolarDB:ローカルテーブルを OSS にシリアルエクスポートする

最終更新日:May 14, 2025

このトピックでは、PolarDB の OSSOUTFILE 機能を使用して、データベーステーブルを Object Storage Service (OSS) バケットの CSV ファイルにエクスポートする方法について説明します。

前提条件

PolarDB クラスタで、以下のデータベースエンジンバージョンのいずれかを実行している必要があります。

  • リビジョンバージョン 8.0.1.1.30 以降の PolarDB for MySQL 8.0.1

  • リビジョンバージョン 8.0.2.2.8 以降の PolarDB for MySQL 8.0.2

PolarDB クラスタのエンジンバージョンの確認方法については、「エンジンバージョン5.6、5.7、8.0」をご参照ください。

注意事項

  • Data Management (DMS) を使用して PolarDB クラスタにアクセスし、データファイルを OSS にエクスポートすることはできません。アクセスしようとすると、次のエラーメッセージが表示されます。

    Can not issue executeUpdate() or executeLargeUpdate() for SELECTs

    [クライアント] または [mysql コマンドラインクライアント Mysql] を使用して PolarDB クラスタにアクセスし、データファイルを OSS にエクスポートできます。詳細については、「クラスタへの接続」をご参照ください。

  • データを OSS に増分バックアップする場合は、バックアップスケジュールを作成および設定できます。詳細については、「バックアップスケジュールの作成」および「バックアップスケジュールを設定する」をご参照ください。

  • 読み取り専用ノードでエクスポートタスクを実行することをお勧めします。SQL 文で /*FORCE_SALVE*/ ヒントを使用するか、読み取り専用ノードに直接接続してデータをエクスポートできます。

パラメータ

パラメータ

説明

loose_oss_outfile_buffer_size

各 OSSOUTFILE スレッドに許可される最大メモリサイズ。有効な値: 102400 ~ 536870912。デフォルト値: 134217728。単位: バイト。メモリサイズが大きいほど、エクスポートが速くなります。

loose_max_oss_outfile_threads

PolarDB で同時に開始できる OSSOUTFILE スレッドの最大数。有効な値: 1 ~ 100。デフォルト値: 1。

SHOW STATUS LIKE "Oss_outfile_threads_running"; 文を実行して、現在のクラスタで実行されている OSSOUTFILE スレッドの数を確認できます。

説明

このパラメータは、PolarDB for MySQL 8.0.1.1.38 以降では有効になりません。

説明

次の式を使用して、OSSOUTFILE 機能で使用される合計最大メモリを計算できます。

loose_max_oss_outfile_threads * loose_oss_outfile_buffer_size

OSSOUTFILE 機能で使用される合計メモリは、ノードメモリの 5% を超えてはなりません。超えると、現在のノードの他のサービスに影響を与える可能性があります。

使用上の注意

構文

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 が追加されると、識別子は文字列型のフィールドの両端にのみ追加されます。それ以外の場合は、すべてのフィールドタイプの両端に識別子が追加されます。

  • NULL_MARKER BY: エクスポートされたテキストファイルでデータベーステーブルの NULL 値がどのように表されるかを指定します。エクスポートされたデータファイルでは、NULL 値は次の方法(優先順位の高い順にリスト)で表すことができます。

    • NULL_MARKER: エクスポートされたテキストファイルの NULL 値の出力表現を直接定義します。NULL_MARKER を使用すると、任意の文字列を NULL 値の表現として使用できます。この方法の優先順位が最も高くなります。

    • ESCAPED BY: N 文字の前に付加して NULL 値を表す単一の エスケープ文字 を指定します。たとえば、ESCAPED BY '\' を指定すると、エクスポートされたデータファイルでは NULL 値は \N として表されます。

    • NULL (デフォルト): 前述の方法のいずれも使用しない場合、NULL 値は文字列「NULL」を使用して表されます。この方法の優先順位が最も低くなります。NULL には、両端に ENCLOSED 識別子がありません。

  • LINES TERMINATED BY: 行間のデリミタ。

詳細については、「MySQL ドキュメント」をご参照ください。

パラメータ

パラメータ

説明

outfile_path

エクスポートされたデータファイルを格納する OSS バケット内のパス。次の部分が含まれます。

各部分はスラッシュ (/) で区切られます。現在のエクスポートタスクの単一のパスに複数のスラッシュ (/) が含まれている場合は、複数レベルのパスが使用されます。ファイルが OSS にアップロードされると、完全なパスは OSS サーバーパス + 現在のタスクのパスになります。エクスポートされたデータファイルの名前は、outfile_path に含める必要があります。

table_name

データを OSS にエクスポートするデータベーステーブルの名前。

手順

OSS サーバーを作成する

CREATE SERVER outserver FOREIGN DATA WRAPPER oss OPTIONS ( EXTRA_SERVER_INFO '{"oss_endpoint": "oss-cn-zhangjiakou-internal.aliyuncs.com", "oss_bucket": "polardb", "oss_access_key_id": "*******", "oss_access_key_secret": "********", "oss_prefix":"B_outfile"}');                 
説明

データを OSS にエクスポートする

たとえば、次の文を実行して、データを oss://polardb/B_outfile/tpch/1t/parallel-lineitem.CSV にエクスポートできます。

  • polardb はバケット名です。

  • B_outfile/tpch/1t/parallel-lineitem.CSV はファイルパスとファイル名です。

SELECT * FROM lineitem INTO OSSOUTFILE 'outserver/tpch/1t/parallel-lineitem.CSV' COLUMNS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' NULL_MARKER BY 'NULL' LINES TERMINATED BY '\n';

データエクスポートタスクのリソース使用量を監視する

クラスタで PolarDB for MySQL 8.0.1.1.38 以降を実行している場合は、次の文を実行して、現在のエクスポートタスクで使用されている合計メモリサイズと合計スレッド数をリアルタイムで表示できます。

  • polardb はバケット名です

    SHOW STATUS LIKE "%Oss_outfile_memory_used%";
  • エクスポートタスクで使用されている合計メモリサイズ (バイト単位) をリアルタイムで表示します。

    SHOW STATUS LIKE "%Oss_outfile_threads_running%";
説明

[クラスターエンドポイント] を使用してノードでエクスポートタスクを実行する場合、SHOW STATUS 文とエクスポート文を同じノードで実行した場合にのみ、タスクで使用されるメモリリソースに関する情報をクエリできます。

次の手順

トラブルシューティング

OSS にデータをエクスポートすると、「ERROR 1086 (HY000): File 'xxxx' already exists」というエラーメッセージが表示されます。

このエラーは、アップロードしようとしているファイルと同じ名前のファイルが OSS に既に存在するために発生します。次のいずれかの解決策を使用して、この問題を解決できます。

  • OSS から既存のファイルを 手動で削除 し、SELECT ... INTO OSSOUTFILE ... 文を再度実行します。

  • OSS_REPLACE_EXISTED_FILE() ヒント を使用して、既存のファイルを強制的に 上書き します。フォーマット:

    SELECT /*+ OSS_REPLACE_EXISTED_FILE() */ * FROM lineitem INTO OSSOUTFILE 'outserver/tpch/1t/parallel-lineitem.CSV' COLUMNS TERMINATED BY '|@|' OPTIONALLY ENCLOSED BY '"' NULL_MARKER BY "" LINES TERMINATED BY '\n';
    説明
    • この hint を使用すると、OSS 上の既存のファイルが強制的に上書きされます。OSS バージョン管理機能が無効になっている場合、上書きされたファイルを復元することはできません。注意して進めてください。この操作を実行する前に、OSS バージョン管理 機能を有効にすることができます。

    • hints を使用するには、PolarDB クラスタで次のデータベースエンジンバージョンのいずれかを実行している必要があります。

      • リビジョンバージョン 8.0.1.1.31 以降の PolarDB for MySQL 8.0.1

      • リビジョンバージョン 8.0.2.2.9 以降の PolarDB for MySQL 8.0.2

OSS にデータをエクスポートすると、「OSS error: error message: The bucket you access does not belong to you., error code: AccessDenied」というエラーメッセージが表示されます。

このエラーは、Alibaba Cloud アカウントの RAM ユーザーまたは AccessKey ペア に OSS バケットに対する 権限 がないために発生します。AccessKey ペアの権限を確認してください。