このトピックでは、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。
説明 このパラメータは、PolarDB for MySQL 8.0.1.1.38 以降では有効になりません。 |
次の式を使用して、OSSOUTFILE 機能で使用される合計最大メモリを計算できます。
loose_max_oss_outfile_threads * loose_oss_outfile_buffer_sizeOSSOUTFILE 機能で使用される合計メモリは、ノードメモリの 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 バケット内のパス。次の部分が含まれます。
各部分はスラッシュ ( |
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_endpointパラメータをoss-{xxx}-internal.aliyuncs.com形式の 内部エンドポイント に設定します。
データを 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 文とエクスポート文を同じノードで実行した場合にのみ、タスクで使用されるメモリリソースに関する情報をクエリできます。