跨區域資料集複製
透過 BigQuery 資料集複製功能,您可以在兩個不同區域或多區域之間,設定自動複製資料集。
總覽
在 BigQuery 中建立資料集時,您會選取資料儲存的區域或多區域。「區域」是指地理區域內的資料中心集合,「多區域」是指包含兩個以上地理區域的大型地理區域。您的資料會儲存在其中一個所含區域,且不會在多區域內複製。如要進一步瞭解單一地區與多地區,請參閱 BigQuery 位置。
BigQuery 一律會在資料集位置的兩個不同Google Cloud 區域中儲存資料副本。「區域」是地區內資源的部署範圍。 Google Cloud 在所有區域中,區域間的複製作業都會使用同步雙重寫入。選取多區域位置不會提供跨區域複製或區域備援功能,因此如果發生區域服務中斷,資料集可用性不會提高。資料會儲存在地理位置內的單一區域。
如要提高異地備援能力,可以複製任何資料集。 BigQuery 會在您指定的另一個區域建立資料集的次要副本。然後,這項副本會以非同步方式在兩個區域之間複製,總共會有四個區域副本。
資料集複製
如果複製資料集,BigQuery 會將資料儲存在您指定的區域。
主要區域。首次建立資料集時,BigQuery 會將資料集放在主要區域。
次要區域。新增資料集副本時,BigQuery 會將副本放在次要區域。
一開始,主要地區的副本是主要副本,次要地區的副本則是次要副本。
主要副本可寫入,次要副本則為唯讀。寫入主要備用資源的資料會以非同步方式複製到次要備用資源。在每個區域內,資料會備援儲存在兩個可用區。網路流量絕不會離開 Google Cloud 網路。
下圖顯示複製資料集時發生的複製作業:
如果主要區域處於連線狀態,您可以手動切換至次要副本。詳情請參閱「升級次要副本」。
定價
系統會針對複製的資料集收取下列費用:
- 儲存空間。次要區域的儲存空間位元組會以次要區域的獨立副本計費。請參閱 BigQuery 儲存空間定價。
- 資料複製。如要進一步瞭解資料複製的計費方式,請參閱資料複製定價。
次要區域的運算資源
如要針對次要區域中的副本執行工作和查詢,您必須在次要區域內購買運算單元,或執行隨選查詢。
您可以使用這些位置,從次要副本執行唯讀查詢。如果將次要副本升級為主要副本,您也可以使用這些時段寫入副本。
您可以購買與主要區域相同或不同數量的運算單元。如果購買的運算單元較少,可能會影響查詢效能。
位置注意事項
如要新增資料集副本,您必須先在 BigQuery 中建立要複製的初始資料集 (如果尚未建立)。新增副本的位置會設為您新增副本時指定的位置。新增副本的位置必須與初始資料集的位置不同。也就是說,資料集中的資料會持續在資料集建立位置和副本位置之間複製。對於需要共置的副本 (例如檢視區塊、具體化檢視區塊或非 BigLake 外部資料表),如果副本的位置與來源資料的位置不同或不相容,可能會導致工作錯誤。
當客戶跨區域複製資料集時,BigQuery 會確保資料只位於建立副本的位置。
主機代管規定
使用資料集複製功能時,必須符合下列共置需求。
Cloud Storage
如要查詢 Cloud Storage 中的資料,Cloud Storage bucket 必須與副本位於同一位置。決定副本的放置位置時,請考量外部資料表位置。
限制
BigQuery 資料集複製作業有下列限制:
- 透過 BigQuery Storage Write API 或
tabledata.insertAll
方法寫入主要副本的串流資料會複製到次要副本,但這項作業盡力而為,可能會有較高的複製延遲。 - 從 Datastream 或 BigQuery 變更資料擷取寫入主要副本的串流 upsert 作業會盡力執行,但可能會有較高的複製延遲。複製完成後,次要副本中的 upsert 會根據表格設定的
max_staleness
值,合併至次要副本的表格基準。 - 您無法在已複製資料集的資料表上啟用精細 DML,也無法複製含有已啟用精細 DML 資料表的資料集。
- 複製和切換作業是透過 SQL 資料定義語言 (DDL) 陳述式管理。
- 每個區域或多區域最多只能有一個資料集副本。您無法在同一個目的地區域中,為同一個資料集建立兩個次要副本。
- 副本中的資源會受到「資源行為」一節所述的限制。
- 政策標記和相關聯的資料政策不會複製到次要副本。即使升級備用資源,在原始地區以外的地區中,凡是參照含有政策標記的資料欄的查詢都會失敗。
- 時空旅行功能僅適用於次要副本,且必須在次要副本建立完成後才能使用。
- 在資料集上啟用跨區域複製功能時,目的地區域大小上限為
us
和eu
多區域的 10 PB,以及其他區域的 500 TB (預設值)。這些限制可設定。如需詳細資訊,請與Google Cloud 支援團隊聯絡。 - 這項配額適用於邏輯資源。
- 您只能複製資料表少於 10 萬個的資料集。
- 每個資料集每天最多只能在同一區域新增 (然後捨棄) 4 個副本。
- 您受到頻寬限制。
- 如果未設定
replica_kms_key
值,則無法在次要區域查詢套用客戶管理的加密金鑰 (CMEK) 的資料表。 - 不支援 BigLake 資料表。
- 您無法複製外部或聯邦資料集。
- 不支援 BigQuery Omni 位置。
- 如果您要為災難復原設定資料複製功能,則無法設定下列區域配對:
us-central1
-us
多區域us-west1
-us
多區域eu-west1
-eu
多區域eu-west4
-eu
多區域
- 無法複製常式層級的存取權控管,但可以複製常式的資料集層級存取權控管。
資源行為
次要副本中的資源不支援下列作業:
次要副本為唯讀副本。如要在次要副本中建立資源副本,您必須先複製或查詢資源,然後在次要副本外部實現結果。舉例來說,您可以使用 CREATE TABLE AS SELECT,從次要副本資源建立新資源。
主要和次要副本有以下差異:
區域 1 主要副本 | 區域 2 次要副本 | 附註 |
---|---|---|
BigLake 資料表 | BigLake 資料表 | 不支援。 |
外部資料表 | 外部資料表 | 系統只會複製外部資料表定義。如果 Cloud Storage bucket 與副本不在同一個位置,查詢就會失敗。 |
邏輯檢視 | 邏輯檢視 | 如果邏輯檢視區塊參照的資料集或資源與邏輯檢視區塊不在相同位置,查詢時就會失敗。 |
受管理資料表 | 受管理資料表 | 沒有差別。 |
具體化檢視表 | 具體化檢視表 | 如果參照的資料表與具體化檢視區不在同一區域,查詢就會失敗。如果複製的具體化檢視表超過檢視表的最大延遲時間,可能會顯示延遲。 |
模型 | 模型 | 以受管理資料表的形式儲存。 |
遠端功能 | 遠端功能 | 連線是區域資源。如果參照的資料集或資源 (連線) 與遠端函式不在相同位置,遠端函式執行時就會失敗。 |
處理常式 | 使用者定義函式 (UDF) 或預存程序 | 如果常式參照的資料集或資源與常式不在相同位置,執行時就會失敗。任何參照連線的常式 (例如遠端函式) 都無法在來源區域外運作。 |
資料列存取政策 | 資料列存取政策 | 沒有差別。 |
搜尋索引 | 搜尋索引 | 未複製。 |
預存程序 | 預存程序 | 如果儲存的程序參照的資料集或資源與儲存的程序不在同一位置,執行時就會失敗。 |
資料表副本 | 受管理資料表 | 在次要副本中以深層副本計費。 |
資料表快照 | 資料表快照 | 在次要副本中以深層副本計費。 |
資料表值函式 (TVF) | TVF | 如果 TVF 參照的資料集或資源與 TVF 位於不同位置,執行時就會失敗。 |
UDF | UDF | 如果 UDF 參照的資料集或資源與 UDF 位於不同位置,執行時就會失敗。 |
服務中斷情境
跨區域複製功能不適合在整個區域中斷時做為災難復原計畫。如果主要副本所在區域全面中斷服務,您就無法升級次要副本。由於次要備用資源為唯讀,因此您無法在次要備用資源上執行任何寫入工作,也無法升級次要區域,直到主要備用資源的區域還原為止。如要進一步瞭解如何準備災難復原作業,請參閱「受管理災難復原」。
下表說明區域全面中斷對複寫資料的影響:
區域 1 | 區域 2 | 服務中斷區域 | 影響 |
---|---|---|---|
主要副本 | 次要副本 | 區域 2 | 在區域 2 中針對次要副本執行的唯讀工作會失敗。 |
主要副本 | 次要副本 | 區域 1 | 在區域 1 中執行的所有工作都會失敗。唯讀工作會繼續在區域 2 執行,也就是次要副本所在的區域。在成功與區域 1 同步前,區域 2 的內容會過時。 |
使用資料集複製功能
本節說明如何複製資料集、升級次要副本,以及在次要區域執行 BigQuery 讀取工作。
所需權限
如要取得管理副本所需的權限,請要求管理員授予您 bigquery.datasets.update
權限。
複製資料集
如要複製資料集,請使用 ALTER SCHEMA ADD REPLICA
DDL 陳述式。
您可以為位於區域或多區域的任何資料集新增副本,但該區域或多區域中不得已有該資料集的副本。新增副本後,初始複製作業需要一段時間才能完成。資料複製期間,您仍可執行參照主要副本的查詢,查詢處理容量不會減少。您無法在多區域內的地理位置複製資料。
下列範例會在 us-central1
區域中建立名為 my_dataset
的資料集,然後在 us-east4
區域中新增副本:
-- Create the primary replica in the us-central1 region. CREATE SCHEMA my_dataset OPTIONS(location='us-central1'); -- Create a replica in the secondary region. ALTER SCHEMA my_dataset ADD REPLICA `my_replica` OPTIONS(location='us-east4');
如要確認次要副本是否已成功建立,可以查詢 INFORMATION_SCHEMA.SCHEMATA_REPLICAS
檢視中的 creation_complete
欄。
建立次要副本後,您可以明確設定查詢位置為次要區域,藉此查詢次要副本。如果未明確設定位置,BigQuery 會使用資料集主要副本的區域。
升級次要副本
如果主要區域處於連線狀態,您可以升級次要副本。 升級後,次要副本就會成為可寫入的主要副本。如果次要副本與主要副本同步,這項作業會在幾秒內完成。如果次要副本未趕上進度,升級作業就無法完成,直到次要副本趕上進度為止。如果主要區域發生服務中斷情形,次要備用資源就無法升級為主要資源。
注意事項:
- 升級程序進行期間,所有寫入資料表的作業都會傳回錯誤。升級作業開始後,舊的主要副本會立即變成不可寫入。
- 促銷活動啟動時未完全複製的資料表會傳回過時的讀取內容。
如要將備用資源升級為主要備用資源,請使用 ALTER SCHEMA SET
OPTIONS
DDL 陳述式,並設定 primary_replica
選項。
請注意下列事項: - 您必須在查詢設定中,明確將工作位置設為次要區域。請參閱指定 BigQuery 位置。
以下範例會將 us-east4
副本升級為主要副本:
ALTER SCHEMA my_dataset SET OPTIONS(primary_replica = 'us-east4')
如要確認次要副本何時升級成功,可以查詢 INFORMATION_SCHEMA.SCHEMATA_REPLICAS
檢視中的 replica_primary_assignment_complete
欄。
移除資料集副本
如要移除副本並停止複製資料集,請使用 ALTER SCHEMA DROP REPLICA
DDL 陳述式。
以下範例會移除 us
副本:
ALTER SCHEMA my_dataset DROP REPLICA IF EXISTS `us`;
如要刪除整個資料集,必須先捨棄所有次要副本。如果您刪除整個資料集 (例如使用 DROP
SCHEMA
陳述式),但未捨棄所有次要副本,系統會顯示下列錯誤訊息:
The dataset replica of the cross region dataset 'project_id:dataset_id' in region 'REGION' is not yet writable because the primary assignment is not yet complete.
詳情請參閱「升級次要副本」。
列出資料集備用資源
如要列出專案中的資料集副本,請查詢 INFORMATION_SCHEMA.SCHEMATA_REPLICAS
檢視區塊。
遷移資料集
您可以透過跨區域資料集複製功能,將資料集從一個區域遷移至另一個區域。以下範例說明如何使用跨區域複製功能,將現有的 my_migration
資料集從 US
多區域遷移至 EU
多區域。
複製資料集
如要開始遷移程序,請先在要遷移資料的區域中複製資料集。在這個情境中,您要將 my_migration
資料集遷移至 EU
多區域。
-- Create a replica in the secondary region. ALTER SCHEMA my_migration ADD REPLICA `eu` OPTIONS(location='eu');
這項操作會在 EU
多區域中建立名為 eu
的次要副本。主要副本是US
多區域中的my_migration
資料集。
升級次要副本
如要繼續將資料集遷移至 EU
多區域,請升級次要副本:
ALTER SCHEMA my_migration SET OPTIONS(primary_replica = 'eu')
升級完成後,eu
即為主要副本。這是可寫入的副本。
完成遷移作業
如要完成從 US
多區域到 EU
多區域的遷移作業,請刪除 us
副本。這個步驟並非必要,但如果您不需要遷移作業以外的資料集副本,這個步驟就很有用。
ALTER SCHEMA my_migration DROP REPLICA IF EXISTS us;
您的資料集位於 EU
多區域,且沒有 my_migration
資料集的副本。您已成功將資料集遷移至 EU
多區域。如要查看遷移的完整資源清單,請參閱「資源行為」。
由客戶管理的加密金鑰 (CMEK)
建立次要副本時,系統不會自動複製客戶代管的 Cloud Key Management Service 金鑰。如要維持複製資料集的加密狀態,您必須為新增副本的位置設定 replica_kms_key
。您可以使用 ALTER SCHEMA ADD REPLICA
DDL 陳述式設定 replica_kms_key
。
使用 CMEK 複製資料集時,行為如下列情境所述:
如果來源資料集有
default_kms_key
,使用ALTER SCHEMA ADD REPLICA
DDL 陳述式時,您必須提供在副本資料集區域中建立的replica_kms_key
。如果來源資料集未設定
default_kms_key
的值,您就無法設定replica_kms_key
。如果您在
default_kms_key
或replica_kms_key
上使用Cloud KMS 金鑰輪替,金鑰輪替後,您仍可查詢複製的資料集。- 主要區域的金鑰輪替只會更新輪替後建立的資料表金鑰版本,輪替前建立的資料表仍會使用輪替前設定的金鑰版本。
- 次要區域的金鑰輪替作業會將次要副本中的所有資料表更新為新金鑰版本。
- 將主要副本切換為次要副本後,次要副本 (原為主要副本) 中的所有資料表都會更新為新金鑰版本。
- 如果刪除金鑰輪替前在主要副本資料表上設定的金鑰版本,則在更新金鑰版本前,仍使用金鑰輪替前設定的金鑰版本的資料表都無法查詢。如要更新金鑰版本,舊金鑰版本必須處於啟用狀態 (不得停用或刪除)。
如果來源資料集未設定
default_kms_key
的值,但來源資料集中的個別資料表已套用 CMEK,則無法在複製的資料集中查詢這些資料表。如要查詢資料表,請按照下列步驟操作:- 為來源資料集新增
default_kms_key
值。 - 使用
ALTER SCHEMA ADD REPLICA
DDL 陳述式建立新副本時,請為replica_kms_key
選項設定值。您可以在目的地區域查詢 CMEK 資料表。
無論來源區域使用的金鑰為何,目的地區域中的所有 CMEK 資料表都會使用相同的
replica_kms_key
。- 為來源資料集新增
使用 CMEK 建立副本
以下範例會在 us-west1
地區建立副本,並設定 replica_kms_key
值。如果是 CMEK 金鑰,請授予 BigQuery 服務帳戶加密和解密權限。
-- Create a replica in the secondary region. ALTER SCHEMA my_dataset ADD REPLICA `us-west1` OPTIONS(location='us-west1', replica_kms_key='my_us_west1_kms_key_name');
CMEK 限制
複製已套用 CMEK 的資料集時,會受到下列限制:
建立副本後,您就無法更新複製的 Cloud KMS 金鑰。
建立資料集副本後,就無法更新來源資料集的「
default_kms_key
」值。如果提供的
replica_kms_key
在目的地區域無效,系統就不會複製資料集。
後續步驟
- 瞭解如何使用 BigQuery 預留項目。
- 瞭解 BigQuery 可靠性功能。