Aurora PostgreSQL Limitless Database での COPY コマンドの使用 - Amazon Aurora

Aurora PostgreSQL Limitless Database での COPY コマンドの使用

psql ユーティリティの \copy 機能を使用して、Aurora PostgreSQL Limitless Database との間でデータをインポートおよびエクスポートできます。

COPY コマンドを使用して Aurora PostgreSQL Limitless Database にデータをロードする

Aurora PostgreSQL Limitless Database は、データをインポートするための psql ユーティリティの \copy 機能と互換性があります。

Aurora PostgreSQL と同様に、Limitless Database では以下はサポートされていません。

  • DB インスタンスへの直接 SSH アクセス – データファイル (.csv 形式など) を DB インスタンスホストにコピーして、ファイルから COPY を実行することはできません。

  • DB インスタンスでのローカルファイルの使用 – COPY ... FROM STDINCOPY ... TO STDOUT を使用します。

PostgreSQL の COPY コマンドには、ローカルファイル (FROM/TO) を操作し、クライアントとサーバー間の接続 (STDIN/STDOUT) を使用してデータを送信するためのオプションがあります。詳細については、PostgreSQL ドキュメントの「COPY」を参照してください。

PostgreSQL psql ユーティリティの \copy コマンドは、psql クライアントを実行するコンピュータ上のローカルファイルで動作します。接続先のリモート (Limitless Database など) サーバーで、それぞれの COPY ... FROM STDIN または COPY ... FROM STDOUT コマンドを呼び出します。ローカルファイルから STDIN にデータを読み取るか、STDOUT から書き込みます。

データを複数のファイルに分割する

データは Aurora PostgreSQL Limitless Database の複数のシャードに保存されます。\copy を使用してデータのロードを高速化するには、データを複数のファイルに分割できます。次に、個別の \copy コマンドを並行して実行して、データファイルごとに個別にインポートします。

例えば、CSV 形式の入力データファイルがあり、インポートする行が 300 万行あるとします。このファイルを 20 万行ずつ含むチャンク (15 チャンク) に分割できます。

split -l200000 data.csv data_ --additional-suffix=.csv -d

これにより、data_14.csv を通じてファイル data_00.csv が作成されます。その後、15 の並列 \copy コマンドを使用してデータをインポートできます。次に例を示します。

psql -h dbcluster.limitless-111122223333.aws-region.rds.amazonaws.com -U username -c "\copy test_table from '/tmp/data_00.csv';" postgres_limitless & psql -h dbcluster.limitless-111122223333.aws-region.rds.amazonaws.com -U username -c "\copy test_table FROM '/tmp/data_01.csv';" postgres_limitless & ... psql -h dbcluster.limitless-111122223333.aws-region.rds.amazonaws.com -U username -c "\copy test_table FROM '/tmp/data_13.csv';" postgres_limitless & psql -h dbcluster.limitless-111122223333.aws-region.rds.amazonaws.com -U username -c "\copy test_table FROM '/tmp/data_14.csv';" postgres_limitless

この手法を使用すると、1 つの \copy コマンドを使用する場合と同じ量のデータが約 10 倍速くインポートされます。

COPY コマンドを使用して Limitless Database データをファイルにコピーする

次の例に示すように、\copy コマンドを使用して、無制限のテーブルからファイルにデータをコピーできます。

postgres_limitless=> \copy test_table TO '/tmp/test_table.csv' DELIMITER ',' CSV HEADER;