匯入 CSV 檔案

本頁說明如何將儲存在 Cloud Storage 值區的 CSV 檔案資料匯入 AlloyDB for PostgreSQL 叢集。

您可以取消將資料匯入 AlloyDB 叢集。詳情請參閱「取消匯入作業」。

事前準備

開始匯入作業前,請先完成下列事項:

  • 確認資料庫有足夠的可用空間。
  • 匯入作業會使用資料庫資源,但除非叢集資源不足,否則不會干擾正常的資料庫作業。

匯入 AlloyDB 叢集所需的角色和權限

如要將資料從 Cloud Storage 匯入 AlloyDB,發起匯入作業的使用者必須具備下列其中一個角色:

此外,AlloyDB 叢集的服務帳戶必須具備下列其中一個角色:

  • storage.objectViewer IAM 角色
  • 自訂角色,包括下列權限:
    • storage.objects.get

如需 IAM 角色相關說明,請參閱身分與存取權管理

從 CSV 檔案將資料匯入 AlloyDB 叢集

  • 您要匯入的目標資料庫與資料表必須已存在於 AlloyDB 叢集上。如需建立資料庫的說明,請參閱建立資料庫
  • CSV 檔案的每一列資料必須有一行,並使用以逗號分隔的欄位。

如要使用 CSV 檔案將資料匯入 AlloyDB 叢集,請按照下列步驟操作:

gcloud

  1. 建立 Cloud Storage 值區
  2. 將 CSV 檔案上傳至值區。 如需將檔案上傳至值區的說明,請參閱「上傳物件」。
  3. 使用 gcloud storage buckets add-iam-policy-binding,將 bucket 的 storage.objectViewer 身分與存取權管理角色授予 AlloyDB 服務帳戶。

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

    如需設定 IAM 權限的說明,請參閱使用 IAM 權限一文。

  4. 匯入檔案:

    gcloud alloydb clusters import CLUSTER_NAME --region=REGION --gcs-uri=gs://BUCKET_NAME/FILE_NAME --database=DATABASE_NAME --user=USER --csv --table=TABLE_NAME

    請將下列項目改為對應的值:

    • CLUSTER_NAME:叢集名稱。
    • REGION:部署 AlloyDB 叢集的區域。
    • BUCKET_NAME:Cloud Storage 值區名稱。
    • FILE_NAME:CSV 檔案的名稱。
    • DATABASE_NAME:叢集內的資料庫名稱。
    • USER:匯入作業的使用者。
    • TABLE_NAME:資料庫中的資料表。

    如要進一步瞭解如何使用 import 指令,請參閱 alloydb import 指令參考資料頁面。

  5. 如果不需要保留先前設定的 IAM 權限,請使用 gcloud storage buckets remove-iam-policy-binding 移除這些權限。

REST v1

  1. 建立 Cloud Storage 值區
  2. 將 CSV 檔案上傳至值區。 如需將檔案上傳至值區的說明,請參閱「上傳物件」。
  3. 授予服務帳戶 Cloud Storage 值區的權限,以進行匯入作業。使用服務帳戶格式,找出要匯入專案的服務帳戶。服務帳戶的格式如下:

    service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com
  4. 使用 gcloud storage buckets add-iam-policy-binding,將 storage.objectViewer 身分與存取權管理角色授予 AlloyDB 叢集服務帳戶。如需設定 IAM 權限的相關說明,請參閱使用 IAM 權限

  5. 匯入檔案。

    請使用下列 HTTP 方法和網址:

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

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:專案 ID。
    • LOCATION_ID:部署 AlloyDB 叢集的區域。
    • CLUSTER_ID:叢集 ID。
    • BUCKET_NAME:Cloud Storage 值區名稱。
    • PATH_TO_CSV_FILE:CSV 檔案的路徑。
    • USER:匯入作業的使用者。
    • DATABASE_NAME:AlloyDB 叢集內的資料庫名稱。
    • TABLE_NAME:資料庫中的資料表。
    • COLUMNS (選用):要匯入的資料欄。
    • ESCAPE_CHARACTER (選用):必須出現在需要逸出資料字元之前的字元。這個引數的值必須是十六進位 ASCII 碼中的字元。舉例來說,22 代表雙引號。
    • QUOTE_CHARACTER (選用):用來括住字串資料類型資料欄值的字元。這個引數的值必須是十六進位 ASCII 碼中的字元。 例如,22 代表雙引號。
    • FIELD_DELIMITER (選用):用來分隔資料欄值的字元。這個引數的值必須是十六進位 ASCII 碼中的字元。例如,2C 代表逗號。

    JSON 要求內文:

    {
      "gcsUri": "gs://BUCKET_NAME/PATH_TO_CSV_FILE",
      "database": "DATABASE_NAME",
      "user": "USER",
      "csvImportOptions": {
        "table": "TABLE_NAME",
        "columns": ["COLUMN1", "COLUMN2"],
        "fieldDelimiter": "FIELD_DELIMITER",
        "quoteCharacter": "QUOTE_CHARACTER",
        "escapeCharacter": "ESCAPE_CHARACTER"
      }
    }
    

    如要傳送要求,請展開以下其中一個選項:

    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": "2024-09-17T06:05:31.244428646Z",
      "target": "projects/project-id/locations/location-id/clusters/target-cluster",
      "verb": "import",
      "requestedCancellation": false,
      "apiVersion": "v1"
     },
     "done": false
    }
    
  6. 如果您不需要保留先前設定的 IAM 權限,請立即移除。

    如需要求的完整參數清單,請參閱 clusters:import

自訂 CSV 格式並匯入檔案

如果 CSV 檔案包含非預設的欄位分隔符號、引號或逸出字元,您可以自訂 CSV 格式並匯入檔案。如要匯入非預設格式的 CSV 檔案,您必須在要求中提供相同的格式設定選項。

請參考下列 gcloud CLI 和 REST API 範例,自訂 CSV 檔案格式。

gcloud

gcloud alloydb clusters import CLUSTER_NAME --region=REGION --database=DATABASE_NAME --gcs-uri='gs://BUCKET_NAME/PATH_TO_CSV_FILE' --user=USERNAME --table=TABLE_NAME --columns=COLUMNS --field-delimiter='2C' --quote-character='22' --escape-character='5C' --csv

REST v1

對等的 REST API 要求主體如下所示:

{
 "gcsUri": "gs://BUCKET_NAME/PATH_TO_CSV_FILE",
 "database": "DATABASE_NAME",
 "user": "USER",
 "csvImportOptions": {
     "table": "TABLE_NAME",
     "columns": ["COLUMN1", "COLUMN2"],
     "escapeCharacter": "5C",
     "quoteCharacter": "22",
     "fieldDelimiter": "2C",
 }
}

如要瞭解如何建立該工作的基礎 REST API 要求,請參閱clusters:import 頁面中的 APIs Explorer

如果看到類似 INVALID_ARGUMENT 的錯誤,請確認該資料夾確實存在。如果資料表存在,請確認您具備值區的適當權限。如需設定 Cloud Storage 存取權控管的說明,請參閱「建立及管理存取權控管清單」。

查看匯入作業的狀態

如要查看匯入作業的狀態,請按照下列步驟操作:

gcloud

使用 gcloud alloydb operations describe 指令執行下列作業:

gcloud alloydb operations describe OPERATION_ID --region=REGION

這些作業的狀態位於 STATUS 欄位中。

您也可以列出特定作業的詳細資料,或取消特定作業。如要進一步瞭解這個指令,請參閱 gcloud alloydb operations 指令參考頁面。

REST v1

請使用 GET 方法和下列網址:

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 的執行個體。

後續步驟