將資料匯出至 AlloyDB (反向 ETL)
從 BigQuery 到 AlloyDB for PostgreSQL 的反向擷取、轉換和載入 (反向 ETL) 工作流程,可讓您將資料從 BigQuery 移至 AlloyDB 資料庫。您可以使用 EXPORT DATA 陳述式,在匯出資料前透過查詢處理或篩選資料,也可以將 BigQuery 資料表同步至 AlloyDB,複製或鏡像整個資料表。
事前準備
建立 AlloyDB 叢集和執行個體,其中包含資料庫、結構定義和資料表,用於接收匯出的資料。執行匯出工作前,必須先建立目標結構定義和資料表。
目標 AlloyDB 執行個體必須是處於
READY狀態的PRIMARY執行個體。建立 BigQuery 連線,連至 AlloyDB 執行個體。連線必須透過使用者名稱和密碼進行驗證。連線中指定的資料庫使用者必須具備目標資料表的
INSERT權限,以及目標結構定義的USAGE權限。如要使用這項功能,請建立 BigQuery Enterprise 或 Enterprise Plus 級預留項目。只有
QUERY指派的預留項目,才能匯出至 AlloyDB。授予 Identity and Access Management (IAM) 角色,讓使用者具備執行本文件中各項工作所需的權限。
必要的角色
如要取得將 BigQuery 資料匯出至 AlloyDB 所需的權限,請要求管理員在專案中授予您下列 IAM 角色:
-
從 BigQuery 資料表匯出資料:BigQuery 資料檢視者 (
roles/bigquery.dataViewer) -
執行擷取工作:BigQuery 使用者 (
roles/bigquery.user) -
使用 BigQuery 連線:BigQuery 連線使用者 (
roles/bigquery.connectionUser) -
連線至 AlloyDB 執行個體:AlloyDB 用戶端 (
roles/alloydb.client) - 連線服務帳戶
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
限制
AlloyDB 匯出作業僅支援批次匯出。無法使用持續查詢匯出至 AlloyDB。
匯出至 AlloyDB 的資料只會新增為新資料列,匯出程序不會修改或刪除 AlloyDB 中的現有記錄。如果目標資料表未定義
PRIMARY KEY或UNIQUE限制,多次匯出相同資料會導致項目重複。為確保資料完整性,建議您在 AlloyDB 資料表上定義
PRIMARY KEY或UNIQUE限制。匯出工作不會執行「新增或更新」作業,也就是在有不重複的比對索引鍵時,更新現有記錄。如果任何傳入資料列違反PRIMARY KEY或UNIQUE限制,整個匯出工作就會失敗。不建議同時執行多個
EXPORT DATA工作,將資料寫入同一個 AlloyDB 資料表。否則可能導致無法預測的行為,例如資料遺失或工作失敗。建議您確認一次只有一項匯出工作寫入特定資料表。僅支援透過 BigQuery 連線進行使用者名稱和密碼驗證。
不支援
ARRAY、BYTES、GEOGRAPHY、INTERVAL和STRUCTBigQuery 資料類型。如果 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 定價」。