SQL ファイルをインポートする

このページでは、Cloud Storage バケットに保存されている SQL ファイルから AlloyDB for PostgreSQL クラスタにデータをインポートする方法について説明します。SQL ファイルは、SQL コマンドのシーケンスを記述した書式なしテキスト ファイルです。

AlloyDB クラスタへのデータのインポートをキャンセルできます。詳細については、インポート オペレーションをキャンセルするをご覧ください。

始める前に

インポート オペレーションを開始する前に、次のことを行います。

  • データベースに十分な空き容量があることを確認します。
  • インポート オペレーションではデータベース リソースが使用されますが、クラスタがプロビジョニングされていない限り、インポートによって通常のデータベース オペレーションが妨げられることはありません。

AlloyDB へのインポートに必要なロールと権限

Cloud Storage から AlloyDB にデータをインポートするには、インポートを開始するユーザーに次のいずれかのロールが必要です。

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

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

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

SQL ファイルを AlloyDB クラスタにインポートする

SQL ファイルを使用して AlloyDB クラスタにデータをインポートする手順は次のとおりです。

コンソール

  1. [クラスタ] ページに移動します。

    [クラスタ] に移動

  2. クラスタ名をクリックして、そのクラスタの [概要] ページを開きます。

  3. [インポート] をクリックします。

  4. [データのインポート元となるファイルを選択してください] で、インポートに使用するバケットと SQL ファイルのパスを入力するか、既存のファイルを参照します。

  5. データをインポートするデータベースを選択します。

    これにより、AlloyDB ではインポート前に USE DATABASE ステートメントが実行されます。SQL ダンプファイルに USE DATABASE ステートメントが含まれている場合、Google Cloud コンソールで設定したデータベースがオーバーライドされます。

  6. 省略可: インポート オペレーションのユーザーを指定します。インポート ファイルに、特定のユーザーで実行しなければならないステートメントが含まれている場合は、このフィールドを使用してユーザーを指定します。

  7. インポート オペレーションを開始するには、[インポート] をクリックします。

gcloud

  1. Cloud Storage バケットを作成する
  2. SQL ファイルをバケットにアップロードします。ファイルをバケットにアップロードする方法については、オブジェクトのアップロードをご覧ください。

  3. gcloud storage buckets add-iam-policy-binding を使用して、バケットの AlloyDB クラスタのサービス アカウントに storage.objectViewer IAM ロールを付与します。

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

    次のように置き換えます。

    • CLUSTER_NAME: クラスタの名前。
    • REGION: AlloyDB クラスタがデプロイされているリージョン。
    • BUCKET_NAME: Cloud Storage バケット名。
    • FILE_NAME: CSV ファイルの名前。
    • DATABASE_NAME: クラスタ内のデータベースの名前。
    • USER: インポート オペレーションのユーザー。
    • TABLE_NAME: データベース内のテーブル。

    IAM 権限の設定については、IAM 権限の使用をご覧ください。

  4. ファイルをインポートします。

    gcloud alloydb clusters import CLUSTER_NAME --region=REGION --database=DATABASE_NAME --gcs-uri='gs://BUCKET_NAME/PATH_TO_SQL_FILE' --user=USERNAME --sql

    コマンドから PERMISSION_DENIED のようなエラーが返された場合は、権限を確認してください。

    import コマンドの使用方法については、alloydb import コマンドのリファレンス ページをご覧ください。

  5. 以前に設定した IAM 権限を保持する必要がない場合は、gcloud storage buckets remove-iam-policy-binding を使用して削除します。

REST v1

  1. Cloud Storage バケットを作成する
  2. SQL ファイルをバケットにアップロードします。ファイルをバケットにアップロードする方法については、オブジェクトのアップロードをご覧ください。
  3. インポート オペレーション用の Cloud Storage バケットに対する権限をサービス アカウントに付与します。サービス アカウントの形式を使用して、インポート先のプロジェクトのサービス アカウントを特定します。サービス アカウントの形式は次のとおりです。

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

  5. SQL ファイルをインポートします。

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

    POST https://alloydbadmin.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/clusters/CLUSTER_ID:import

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

    • PROJECT_ID: プロジェクト ID。
    • LOCATION_ID: AlloyDB クラスタがデプロイされているリージョン。
    • CLUSTER_ID: クラスタ ID。
    • BUCKET_NAME: Cloud Storage バケット名。
    • PATH_TO_SQL_FILE: SQL ファイルのパス。
    • USER: インポートに使用するユーザー。
    • DATABASE_NAME: AlloyDB クラスタ内のデータベースの名前。

    JSON 本文のリクエスト:

    {
       "gcsUri": "gs://BUCKET_NAME/PATH_TO_SQL_FILE",
       "database": "DATABASE_NAME",
       "user": "USER",
       "sqlImportOptions": {}
    }
    

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

    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/LOCATION_ID/clusters/CLUSTER_ID:import"
    

    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/LOCATION_ID/clusters/CLUSTER_ID:import"| Select-Object -Expand Content
    

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

    レスポンス

    {
     "name": "projects/project-id/locations/location-id/operations/operation-id",
     "metadata": {
      "@type": "type.googleapis.com/google.cloud.alloydb.v1.OperationMetadata",
      "createTime": "2025-01-04T13:12:32.363393723Z",
      "target": "projects/project-id/locations/location-id/clusters/cluster-id",
      "verb": "import",
      "requestedCancellation": false,
      "apiVersion": "v1"
     },
     "done": false
    }
    

    別のユーザーがインポートするには、user プロパティを指定します。

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

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

インポート オペレーションのステータスを確認する

インポート オペレーションのステータスを確認する手順は次のとおりです。

gcloud

gcloud alloydb operations describe コマンドを使用して、次のコマンドを実行します。

gcloud alloydb operations describe OPERATION_ID --region=REGION

特定のオペレーションの詳細を一覧表示したり、特定のオペレーションをキャンセルしたりすることもできます。このコマンドの詳細については、gcloud alloydb operations コマンドのリファレンス ページをご覧ください。

REST v1

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

GET https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID

詳細については、get をご覧ください。

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

  • REGION: AlloyDB クラスタがデプロイされているリージョン。
  • PROJECT_ID: プロジェクト ID。
  • OPERATION_ID: インポート オペレーションの ID。詳細については、始める前にをご覧ください。

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

curl(Linux、macOS、Cloud Shell)

次のコマンドを実行します。

  curl -X GET \
       -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID
 

PowerShell(Windows)

次のコマンドを実行します。

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

Invoke-WebRequest `
  -Method GET `
  -Headers $headers `
  -Uri "https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID | Select-Object -Expand Content

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

成功した場合、レスポンスの本文には Operation のインスタンスが含まれます。

次のステップ