CSV ファイルをエクスポートする

このページでは、AlloyDB for PostgreSQL クラスタから Cloud Storage バケットに CSV 形式でデータをエクスポートする方法について説明します。この形式は、他のツールや環境で使用できます。

サポートされているデータベース サーバーから新しい AlloyDB インスタンスにデータベース全体を移行する方法については、Database Migration Service を使用してデータベースを AlloyDB に移行するをご覧ください。エクスポートされたファイルから新しいインスタンスを作成するためにエクスポートする場合は、保存されているバックアップからクラスタを復元することを検討してください。

AlloyDB for PostgreSQL クラスタからのデータのエクスポートをキャンセルできます。詳細については、データのエクスポートをキャンセルするをご覧ください。

始める前に

  • エクスポート オペレーションを開始する前に、エクスポート オペレーションではデータベース リソースが使用されますが、インスタンスがプロビジョニングされていない限り、エクスポートによって標準のデータベース オペレーションが妨げられることはありません。
  • SELECT_QUERY にはコメントや先頭と末尾の空白文字を含めることができます。エクスポート クエリを実行する前に、コメントは無視され、空白文字は削除されます。
  • ターゲット バケットがソースクラスタとは異なるリージョンにある場合、リージョン間のデータ転送料金が適用されます。詳細については、AlloyDB for PostgreSQL の料金をご覧ください。
  • 複数のエクスポート オペレーションを並行して実行できます。
  • オブジェクト名が .gz 拡張子で終わっている場合、圧縮が有効になります。オブジェクトは .gz 形式で Cloud Storage にエクスポートされます。
  • CSV オプション(field_delimiterquote_characterescape_character など)の文字値には、16 進数コードの ASCII 文字(0x 接頭辞の有無にかかわらず)のみを使用できます。

AlloyDB からのエクスポートに必要なロールと権限

AlloyDB から Cloud Storage にデータをエクスポートするには、エクスポートを開始するユーザーに次のいずれかの Identity and Access Management(IAM)ロールが必要です。

また、AlloyDB クラスタのサービス アカウントには、次のいずれかのロールが必要です。

  • storage.objectAdmin IAM ロール
  • 次の権限を含むカスタムロール:
    • storage.objects.create

IAM ロールについては、Identity and Access Management をご覧ください。

CSV ファイルへのデータのエクスポート

CSV をエクスポートするときに、エクスポートするスキーマを指定できます。データベース レベルのスキーマはすべてエクスポート可能です。

CSV ファイル形式は、gcloud CLI または REST API を使用してカスタマイズできます。

gcloud

  1. Cloud Storage バケットを作成する
  2. エクスポート オペレーション用の Cloud Storage バケットに対する権限をサービス アカウントに付与します。サービス アカウントの形式を使用して、エクスポート元のプロジェクトのサービス アカウントを特定します。サービス アカウントの形式は次のとおりです。

    service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com
  3. gcloud storage buckets add-iam-policy-binding を使用して、サービス アカウントに storage.objectAdmin IAM ロールを付与します。IAM 権限の設定については、IAM 権限の使用をご覧ください。

  4. データベースを Cloud Storage バケットにエクスポートします。

    CSV エクスポート コマンド(TODOgcloud alloydb clusters export)を実行します。

    次の表に、CSV 形式でデータをエクスポートするためのオプションを示します。

    • --select-query(必須): データを抽出するために使用する select クエリ。
    • --async(省略可): 処理中のオペレーションの完了を待たずに、直ちにコマンドを終了します。
    • --field-delimiter(省略可): ファイルの各行(行)の列を区切る文字を指定します。デフォルトはカンマです。この引数の値は 16 進数 ASCII コード内の文字である必要があります。
    • --quote-character(省略可): データ値を引用符で囲む際に使用する引用符文字を指定します。デフォルトは二重引用符です。この引数の値は 16 進数 ASCII コード内の文字である必要があります。
    • --escape-character(省略可): エスケープが必要なデータ文字の前に表示する文字を指定します。デフォルトは --quote-character と同じです。この引数の値は 16 進数 ASCII コード内の文字である必要があります。

    これらの機能を使用するには、gcloud CLI コマンドにこれらのオプションを含めます。

    それ以外の場合は、次のコマンドからこれらのパラメータを削除します。

    gcloud alloydb clusters export CLUSTER_NAME
      --region=REGION
      --database=DATABASE_NAME
      --gcs-uri="gs://BUCKET_NAME/OBJECT_NAME"
      --select-query=SELECT_QUERY
      --field-delimiter=FIELD_DELIMITER
      --quote-character=QUOTE_CHARACTER
      --escape-character=ESCAPE_CHARACTER
      --csv
  5. 以前に設定した IAM ロールを保持する必要がない場合は、この時点で取り消ししてください。

REST v1

  1. エクスポート先のバケットを作成します。

    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME>
  2. サービス アカウントの形式を使用して、エクスポート元のプロジェクトのサービス アカウントを特定します。

    サービス アカウントの形式は次のとおりです。

     service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com

    これには、エクスポート オペレーション用の Cloud Storage バケットへの権限が必要です。

  3. gcloud storage buckets add-iam-policy-binding を使用して、サービス アカウントに storage.objectAdmin IAM ロールを付与します。IAM 権限の設定については、IAM 権限の使用をご覧ください。

  4. データベースをエクスポートします。

    次の HTTP メソッドと URL を使用します。

    POST https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID:export

    リクエスト データを使用する前に、次のように置き換えます。

    • PROJECT_ID: プロジェクト ID。
    • REGION: AlloyDB クラスタがデプロイされているリージョン。
    • CLUSTER_ID: クラスタ ID。
    • BUCKET_NAME: Cloud Storage バケット名。
    • PATH_TO_CSV_FILE: CSV ファイルのパス。
    • DATABASE_NAME: AlloyDB クラスタ内のデータベースの名前。
    • SELECT_QUERY: エクスポート用の SQL クエリ。

    • ESCAPE_CHARACTER(省略可): エスケープが必要なデータ文字の前に表示する文字。この引数の値は 16 進数 ASCII コード内の文字である必要があります。たとえば、22 は二重引用符を表します。

    • QUOTE_CHARACTER(省略可): 文字列データ型を持つ列の値を囲む文字。この引数の値は 16 進数 ASCII コード内の文字である必要があります。たとえば、22 は二重引用符を表します。

    • FIELD_DELIMITER(省略可): 列の値を分割する文字。この引数の値は 16 進数 ASCII コード内の文字である必要があります。たとえば、2C はカンマを表します。

    JSON 本文のリクエスト:

    {
      "gcs_destination": {
        "uri": "gs://BUCKET_NAME/PATH_TO_CSV_FILE"
      },
      "database": "DATABASE_NAME",
      "csv_export_options": {
        "select_query": "SELECT_QUERY",
        "escape_character": "ESCAPE_CHARACTER",
        "quote_character": "QUOTE_CHARACTER",
        "field_delimiter": "FIELD_DELIMITER"
      }
    }
    

    リクエストを送信するには、次のいずれかのオプションを使用します。

curl(Linux、macOS、Cloud Shell)

リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

       curl -X POST \
             -H "Authorization: Bearer $(gcloud auth print-access-token)" \
             -H "Content-Type: application/json; charset=utf-8" \
             -d @request.json \
             "https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID:export"
  

PowerShell(Windows)

リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
      -Method POST `
      -Headers $headers `
      -ContentType: "application/json; charset=utf-8" `
      -InFile request.json `
      -Uri "https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID:export"| Select-Object -Expand Content
  

次のような JSON レスポンスが返されます。

レスポンス

    {
     "name": "projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID",
     "metadata": {
      "@type": "type.googleapis.com/google.cloud.alloydb.v1.OperationMetadata",
      "createTime": "2024-09-17T06:05:31.244428646Z",
      "target": "projects/PROJECT_ID/locations/REGION/clusters/TARGET_CLUSTER",
      "verb": "export",
      "requestedCancellation": false,
      "apiVersion": "v1"
     },
     "done": false
    }
  

以前に設定した IAM 権限を保持する必要がない場合は、今すぐ削除してください。

リクエストのパラメータの一覧については、clusters:export をご覧ください。

CSV エクスポート ファイルの形式をカスタマイズする

CSV ファイル形式は、gcloud CLI または REST API を使用してカスタマイズできます。エクスポートを実行するときに、次のフォーマット オプションを指定できます。


CSV オプション

デフォルト値

gcloud フラグ

REST API プロパティ

説明

Escape

デフォルトは QUOTE 値と同じです。
--escape-character escape_character エスケープする必要があるデータ文字の前に表示される文字。

見積もり
"22"
二重引用符の ASCII 16 進数コード。
--quote-character quote_character データ値を引用符で囲むときに使用する引用符文字を指定します。
フィールド区切り文字 "2C"
カンマを表す ASCII 16 進数コード。
--field-delimiter field_delimiter 列の値を分割する文字。

たとえば、これらの引数をすべて使用する gcloud CLI コマンドは次のようになります。

gcloud alloydb clusters export CLUSTER_NAME \
--region=REGION \
--database=DATABASE_NAME \
--gcs-uri='gs://BUCKET_NAME/PATH_TO_CSV_FILE' \
--select-query=SELECT_QUERY \
--field-delimiter='2C' \
--quote-character='22' \
--escape-character='5C'
--csv

同等の REST API リクエストの本文は次のようになります。

{
 "exportContext":
   {
      "gcs_destination": {
        "uri": "gs://BUCKET_NAME/PATH_TO_CSV_FILE",
      },
      "database": "DATABASE_NAME",
      "csv_export_options":
       {
           "select_query": "SELECT_QUERY",
           "escape_character": "5C",
           "quote_character": "22",
           "field_delimiter": "2C",
       }
   }
}

デフォルトでは、CSV エクスポートによって標準の CSV 出力が作成されます。AlloyDB で提供されるオプションよりも多くのオプションが必要な場合は、psql クライアントで次のステートメントを使用します。

     \copy `TABLE_NAME` TO `CSV_FILE_NAME.csv' WITH
          (FORMAT csv, ESCAPE 'ESCAPE_CHARACTER', QUOTE 'QUOTE_CHARACTER',
          DELIMITER 'DELIMITER_CHARACTER', ENCODING 'UTF8', NULL 'NULL_MARKER_STRING');

次のステップ