將資料匯出至 AlloyDB (反向 ETL)

本文說明如何設定從 BigQuery 到 AlloyDB for PostgreSQL 的反向擷取、轉換及載入 (反向 ETL) 工作流程。您可以使用 EXPORT DATA 陳述式執行這項操作

事前準備

必要的角色

如要取得將 BigQuery 資料匯出至 AlloyDB 所需的權限,請要求系統管理員在專案中授予您下列 IAM 角色:

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

您或許也能透過自訂角色或其他預先定義的角色,取得必要權限。

限制

  • AlloyDB 匯出作業僅支援批次匯出。您無法使用連續查詢匯出至 AlloyDB。

  • 匯出至 AlloyDB 的資料只會以新資料列的形式新增,匯出程序不會修改或刪除 AlloyDB 中的現有記錄。如果目標資料表未定義 PRIMARY KEYUNIQUE 限制,多次匯出相同資料會導致項目重複。

  • 為確保資料完整性,建議您在 AlloyDB 資料表上定義 PRIMARY KEYUNIQUE 限制。匯出工作不會執行「upsert」,也就是在有相符的專屬鍵時更新現有記錄。如有任何傳入的資料列違反 PRIMARY KEYUNIQUE 限制,整個匯出工作就會失敗。

  • 我們不建議對同一個 AlloyDB 表格執行多個並行 EXPORT DATA 工作。否則可能會導致無法預測的行為,例如資料遺失或工作失敗。建議您確認一次只有一個匯出工作會寫入特定資料表。

  • 系統僅支援透過 BigQuery 連線進行使用者名稱和密碼驗證。

  • 不支援 ARRAYBYTESGEOGRAPHYINTERVALSTRUCT BigQuery 資料類型。

  • 如果 BigQuery SELECT 陳述式省略目標 AlloyDB 資料表中存在的資料欄,這些資料欄必須允許 NULL 值,或在 AlloyDB 中定義預設值。如果這些欄位有 NOT NULL 限制,且沒有預設值,匯出作業就會失敗。

  • 只有 BigQuery Enterprise 或 Enterprise Plus 版本支援匯出至 AlloyDB。不支援 BigQuery Standard 版和隨選運算。詳情請參閱「管理功能」。

  • BigQuery 工作 (例如擷取至 AlloyDB 的工作) 的時間上限為 6 小時。如果匯出作業的資料量非常大,建議您將匯出作業拆分成多個較小的作業。

位置注意事項

將資料匯出至 AlloyDB 時,BigQuery 資料集和 AlloyDB 執行個體的位置須符合特定規定:

  • 同區域匯出:目標 AlloyDB 執行個體必須與 BigQuery 資料集位於完全相同的 Google Cloud 區域。舉例來說,us-east1 中的資料集只能匯出至 us-east1 中的 AlloyDB 執行個體。

  • 多區域匯出:

    • US 多區域中的資料集只能匯出至 us-central1 區域的 AlloyDB 執行個體。
    • EU 多區域中的資料集只能匯出至 europe-west4 區域的 AlloyDB 執行個體。

系統不支援上述組合以外的跨區域匯出作業。

使用 alloydb_options 設定匯出作業

您可以使用 alloydb_options 選項指定目標 AlloyDB 結構定義、資料表和連線上限。設定會以 JSON 字串表示。只有 table 參數為必填,其他參數皆為選填。

設定匯出作業時,SELECT 陳述式中的資料欄必須有別名,且別名與目標 AlloyDB 資料表中的資料欄名稱相符。

EXPORT DATA
  WITH CONNECTION `PROJECT_ID.LOCATION.CONNECTION_ID`
  OPTIONS(
    format='ALLOYDB',
    uri="https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/clusters/CLUSTER_ID/instances/INSTANCE_ID",
    alloydb_options="""{
      "schema": "SCHEMA_NAME",
      "table": "TABLE_NAME",
      "max_parallel_connections": MAX_CONNECTIONS
    }"""
  )
AS SELECT * FROM `mydataset.table1`;

更改下列內容:

  • PROJECT_ID:您 Google Cloud 專案的名稱。
  • LOCATION:連線和目標執行個體的位置。
  • CONNECTION_ID:BigQuery 連線的名稱。
  • CLUSTER_ID:AlloyDB 叢集名稱。
  • INSTANCE_ID:目標 AlloyDB 執行個體的名稱。
  • SCHEMA_NAME (選用):AlloyDB 中目的地結構定義的名稱。如未提供,系統會使用為資料庫使用者設定的預設結構定義。
  • TABLE_NAME:AlloyDB 中現有目的地資料表的名稱,不含結構定義前置字元。
  • MAX_CONNECTIONS (選用):BigQuery 工作人員與 AlloyDB 執行個體之間並行連線的數量上限。限制連線可避免在大量匯出期間,目標執行個體過度負載。

匯出資料

您可以使用 EXPORT DATA 陳述式,將資料從 BigQuery 資料表匯出至 AlloyDB 資料表。

以下範例會將名為 mydataset.table1 的資料表中的選定欄位,匯出至名為 my_target_table 的 AlloyDB 資料表:

EXPORT DATA
  WITH CONNECTION `myproject.us-central1.my-alloydb-conn`
  OPTIONS (
    format='ALLOYDB',
    uri="https://alloydb.googleapis.com/v1/projects/myproject/locations/us-central1/clusters/my-cluster/instances/my-instance",
    alloydb_options="""{
      "schema": "public",
      "table": "my_target_table"
    }"""
  )
AS SELECT
  col1 AS id,
  col2 AS name,
  col3 AS value
FROM
  `mydataset.table1`;

定價

使用 EXPORT DATA 陳述式將資料匯出至 AlloyDB 時,系統會按照 BigQuery 容量運算定價計費。

匯出資料之後,系統會因您在 AlloyDB 中儲存資料而向您收取費用。詳情請參閱 AlloyDB for PostgreSQL 定價