Alibaba Cloud Object Storage Service (OSS) は、安全でコスト効率が高く、信頼性の高いクラウドストレージサービスです。このトピックでは、copy to コマンドと hg_dump_to_oss コマンドを使用して、クエリ結果を指定された OSS のロケーションにエクスポートする方法について説明します。
制限事項
-
現在の Hologres インスタンスのスーパーユーザー、または
pg_execute_server_program権限を持つユーザーのみがhg_dump_to_ossを使用して Hologres データを OSS にエクスポートできます。スーパーユーザーは、次のコマンドを実行して、他のユーザーにpg_execute_server_program権限を付与できます。-- DB が簡易権限モデルを使用している場合は、次の文を実行します CALL spm_grant('pg_execute_server_program','Alibaba Cloud アカウント ID/メールアドレス/RAM ユーザー'); -- DB が標準の PostgreSQL 権限モデルを使用している場合は、次の文を実行します GRANT pg_execute_server_program TO Alibaba Cloud アカウント ID/メールアドレス/RAM ユーザー; -
OSS への 1 回のインポートのデータ量は 5 GB を超えることはできません。
コマンドの概要
-
COPY コマンド:
COPYコマンドは、PostgreSQL テーブルと標準ファイルシステム間でデータを移動します。Hologres はCOPYコマンドをサポートしています。COPY TO文は、SELECT クエリの結果をファイルまたは別の出力媒体にコピーします。COPY FROM文は、ファイルからテーブルにデータをコピーします。 -
hg_dump_to_oss コマンド:Hologres のクエリ結果を指定された OSS のロケーションにダンプします。
COPY コマンド
COPY TO コマンドの構文とパラメーターは次のとおりです。
-
構文
COPY ( query ) TO { PROGRAM 'command' | STDOUT } [ [ WITH ] ( option [, ...] ) ]option には、次のいずれかを指定できます。
FORMAT [format_name] DELIMITER 'delimiter_character' NULL 'null_string' HEADER QUOTE 'quote_character' ESCAPE 'escape_character' ENCODING 'encoding_name' -
パラメーター
パラメーター
説明
query
実行するクエリ文。クエリ文を囲む括弧は必須です。
PROGRAM
実行するコマンド。出力はコマンドの標準入力に書き込まれます。
STDOUT
出力がクライアントアプリケーションに送信されることを指定します。
FORMAT
データ形式を選択します。形式は、テキスト、csv、またはバイナリです。デフォルトはテキストです。
DELIMITER
ファイルの各行内の列を区切る文字を指定します。これは 1 バイトの単一文字である必要があります。次のリストは、さまざまなデータ形式のデフォルト文字を示しています:
-
テキスト形式の場合、デフォルトはタブ文字 (\t) です。
-
csv 形式の場合、デフォルトはコンマ (,) です。
-
このオプションはバイナリ形式ではサポートされていません。
NULL
NULL 値を表す文字列を指定します。次のリストは、さまざまなデータ形式のデフォルト文字列を示しています:
-
テキスト形式の場合、デフォルトは \N です。
-
csv 形式の場合、デフォルトは引用符で囲まれていない空文字列です。
このオプションはバイナリ形式ではサポートされていません。
HEADER
ファイルに列名を含むヘッダー行があることを指定します。CSV ファイルのみがこのオプションをサポートします。
QUOTE
QUOTE 値に一致するデータ文字の前に表示する必要がある文字を指定します。これは 1 バイトの単一文字である必要があります。デフォルトは QUOTE 値と同じです。CSV 形式のみがこのオプションをサポートします。
ENCODING
ファイルが encoding_name でエンコードされていることを指定します。このオプションを省略した場合、現在のクライアントエンコーディングが使用されます。
-
hg_dump_to_oss コマンド
hg_dump_to_oss コマンドの構文とパラメーターは次のとおりです。Hologres では、hg_dump_to_oss コマンドは COPY TO コマンドと共に使用されます。
-
構文
COPY (query) TO PROGRAM 'hg_dump_to_oss --AccessKeyId <accessid> --AccessKeySecret <accesskey> --Endpoint <ossendpoint> --BucketName <bucketname> --DirName <dirname> --FileName <filename> --BatchSize <xxx> ' (DELIMITER ',', HEADER true, FORMAT CSV);説明/や\などの文字を <dirname> の前に追加しないでください。 -
パラメーター
パラメーター
説明
例
query
実行するクエリ文。
select * from dual;AccessKeyId
ご利用のアカウントの AccessKey ID。
[AccessKey 管理] ページに移動して、AccessKey ID を取得できます。
なし
AccessKeySecret
ご利用のアカウントの AccessKey Secret。
なし
Endpoint
OSS クラシックネットワークのエンドポイント。
バケットリストページで対象のバケット名をクリックすると、バケットの詳細を表示できます。
oss-cn-beijing-internal.aliyuncs.com
BucketName
OSS バケットの名前。
dummy_bucket
DirName
出力結果が格納される OSS 内のフォルダ。
testdemo/
FileName
(オプション) OSS 内のファイルの名前。
file_name
BatchSize
hg_dump_to_ossの実行ごとの行数。デフォルトは 1000 です。5000
DELIMITER
結果の列間の区切り文字。デフォルトはタブ文字 (タブ区切り値、TSV) です。
','
使用例
次の例は、Hologres で hg_dump_to_oss コマンドを COPY TO コマンドと共に使用する方法を示しています。
-- Hologres 内部テーブルから指定された OSS のロケーションにデータをダンプします
COPY (SELECT * FROM holo_test LIMIT 2) TO PROGRAM 'hg_dump_to_oss --AccessKeyId <access id> --AccessKeySecret <access key> --Endpoint oss-cn-hangzhou-internal.aliyuncs.com --BucketName hologres-demo --DirName holotest/ --FileName file_name --BatchSize 3000' DELIMITER ',';
-- Hologres 外部テーブルから指定された OSS のロケーションにデータをダンプします
COPY (SELECT * FROM foreign_holo_test LIMIT 20) TO PROGRAM 'hg_dump_to_oss --AccessKeyId <access id> --AccessKeySecret <access key> --Endpoint oss-cn-hangzhou-internal.aliyuncs.com --BucketName hologres-demo --DirName holotest/ --FileName file_name --BatchSize 3000' (DELIMITER ',', HEADER true);
-- リージョン間のダンプを実行して、指定された OSS のロケーションにデータをダンプします
COPY (SELECT * FROM holo_test_1 LIMIT 20) TO PROGRAM 'hg_dump_to_oss --AccessKeyId <access id> --AccessKeySecret <access key> --Endpoint oss-cn-beijing-internal.aliyuncs.com --BucketName hologres-demo --DirName holotest/ --FileName file_name --BatchSize 3000' (DELIMITER ',', HEADER true, FORMAT CSV);
Hologres は、指定された OSS のロケーションへのリージョン間のデータエクスポートをサポートしています。たとえば、中国 (杭州) リージョンのインスタンスからクエリされたデータを、中国 (北京) リージョンの OSS にエクスポートできます。
FAQ
一般的なエラーとそのソリューションを次に示します:
-
ERROR: syntax error at or near ")"LINE 1: COPY (select 1,2,3 from ) TO PROGRAM 'hg_dump_to_oss2 --Acce...入力された query が無効です。クエリ文を確認してください。
-
DETAIL: child process exited with exit code 255選択した OSS ネットワークタイプが正しくありません。パブリッククラウドを使用している場合は、クラシックネットワークを選択してください。
-
DETAIL: command not foundDUMP TO OSSの [プログラム] パラメーターを hg_dump_to_oss に設定する必要があります。そうしないと、このエラーが発生します。 -
ERROR: program "hg_dump_to_oss ...” failed DETAIL: child process exited with exit code 101入力された AccessKeyId が無効です。ご利用のアカウントの AccessKey ID を使用してください。
-
ERROR: program "hg_dump_to_oss ...” failed DETAIL: child process exited with exit code 102入力された AccessKeySecret が無効です。ご利用のアカウントの AccessKey Secret を使用してください。
-
ERROR: program "hg_dump_to_oss ...” failed DETAIL: child process exited with exit code 103入力された Endpoint が無効です。対応する OSS クラシックネットワークのエンドポイントを確認してください。
-
ERROR: program "hg_dump_to_oss ...” failed DETAIL: child process exited with exit code 104入力された BucketName が無効です。バケット名を確認してください。
-
ERROR: program "hg_dump_to_oss ..." failed DETAIL: child process exited with exit code 105必須パラメーターがありません。パラメーターの説明を確認し、すべての必須パラメーターが設定されていることを確認してください。
-
ERROR: program "hg_dump_to_oss ...” failed DETAIL: child process exited with exit code 255このエラーは通常、Hologres サーバーが指定された OSS ネットワークに接続できないために発生します。OSS ドメイン名を変更できます。たとえば、OSS ネットワークタイプとしてクラシックネットワークを選択します。OSS ドメイン名の詳細については、「リージョンとエンドポイント」をご参照ください。