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

從 BigQuery 到 AlloyDB for PostgreSQL 的反向擷取、轉換和載入 (反向 ETL) 工作流程,可讓您將資料從 BigQuery 移至 AlloyDB 資料庫。您可以使用 EXPORT DATA 陳述式,在匯出資料前透過查詢處理或篩選資料,也可以將 BigQuery 資料表同步至 AlloyDB,複製或鏡像整個資料表。

事前準備

必要的角色

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

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

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

限制

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

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

  • 為確保資料完整性,建議您在 AlloyDB 資料表上定義 PRIMARY KEY 或 UNIQUE 限制。匯出工作不會執行「新增或更新」作業,也就是在有不重複的比對索引鍵時,更新現有記錄。如果任何傳入資料列違反 PRIMARY KEY 或 UNIQUE 限制,整個匯出工作就會失敗。

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

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

  • 不支援 ARRAY、BYTES、GEOGRAPHY、INTERVAL 和 STRUCT 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 worker 與 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`;

同步處理要匯出的資料表

如要複製完整資料表或自動建立鏡像,而不需進行 SQL 轉換,可以直接將 BigQuery 資料表同步至 AlloyDB。EXPORT DATA 陳述式可讓您使用 SELECT 查詢,在移動資料前處理、別名或篩選資料,而資料表同步功能則可一對一遷移 BigQuery 資料表。

資料表同步作業提供下列模式:

  • 一次性匯入:在 AlloyDB 中建立可寫入的獨立 BigQuery 資料表副本。
  • 定期同步 (鏡像):在 AlloyDB 中建立唯讀本機資料表,並按照定義的時間表,自動從 BigQuery 重新整理。

詳情請參閱「將 BigQuery 資料同步至 AlloyDB」。

定價

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

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