外部資料表簡介
本文說明如何使用外部資料表,處理儲存在 BigQuery 外部的資料。如要使用外部資料來源,也可以使用外部資料集。
外部資料表可讓您查詢外部資料存放區中的結構化資料。如要查詢外部資料表,您必須同時擁有外部資料表和外部資料來源的權限。舉例來說,如要查詢使用 Cloud Storage 中資料來源的外部資料表,您必須具備下列權限:
bigquery.tables.getDatabigquery.jobs.createstorage.buckets.getstorage.objects.get
支援的資料儲存庫
您可以在下列資料儲存庫中使用非 BigLake 外部資料表:
支援臨時資料表
您可以在 BigQuery 中使用永久資料表或臨時資料表查詢外部資料來源。永久資料表是在資料集中建立並連結至外部資料來源的資料表。由於資料表是永久的,因此您可以透過存取控管機制,與其他有權存取目標外部資料來源的使用者共用資料表,並隨時查詢資料表。
使用臨時資料表查詢外部資料來源時,您必須提交內含查詢的指令,並建立連結至外部資料來源的非永久資料表。使用臨時資料表時,不用在 BigQuery 資料集內建立資料表。因為資料表不會永久儲存在資料集中,所以無法與其他使用者分享。使用臨時資料表查詢外部資料來源,對於臨時的一次性外部資料查詢作業,或對擷取、轉換和載入 (ETL) 程序而言非常有用。
多個來源檔案
如果您根據 Cloud Storage 建立非 BigLake 外部資料表,只要這些資料來源具有相同結構,您就能使用多個外部資料來源。不支援以 Bigtable 或 Google 雲端硬碟為基礎的非 BigLake 外部資料表。
限制
外部資料表有以下限制:
- BigQuery 無法保證外部資料表資料的一致性。如果基礎資料在查詢執行期間遭到變更,可能會導致非預期的行為。
- 與查詢標準 BigQuery 資料表中的資料相比,外部資料表的查詢效能可能會較慢。如果查詢速度是首要考量,請將資料載入 BigQuery,而非設定外部資料來源。包含外部資料表的查詢效能取決於外部儲存空間類型。舉例來說,查詢儲存在 Cloud Storage 中的資料會比查詢 Google 雲端硬碟中的資料快。一般來說,外部資料表的查詢效能應等同於直接從資料來源讀取資料。
- 您無法使用 DML 或其他方法修改外部資料表。外部資料表在 BigQuery 中為唯讀。
- 您無法使用
TableDataListJSON API 方法,從外部資料表擷取資料。詳情請參閱「tabledata.list」。如要解決這項限制,您可以將查詢結果儲存在目標資料表中。然後,您可以在結果表格上使用TableDataList方法。 - 您無法執行 BigQuery 工作,從外部資料表匯出資料。如要解決這項限制,您可以將查詢結果儲存在目標資料表中。然後對結果資料表執行擷取作業。
- 無法複製外部資料表。
- 您無法在Wildcard 資料表查詢中參照外部資料表。
- 外部資料表不支援叢集。這類資料庫支援的分區方式有限。詳情請參閱「查詢外部分區資料」。
- 查詢 Cloud Storage 以外的外部資料來源時,結果不會快取。(支援對 Cloud Storage 執行 GoogleSQL 查詢)。每次查詢外部資料表,系統均會向您收費,即使您是發出多次相同的查詢也一樣。如果您需要對不常變更的外部資料表重複發出查詢,請考慮將查詢結果寫入永久性資料表,然後改對永久性資料表執行查詢。
- 您最多只能對 Bigtable 外部資料來源執行 16 個並行查詢。
- 即使傳回資料列,使用外部資料表的聯合查詢模擬測試也可能會回報 0 位元組的資料下限。這是因為系統要等到實際查詢完成,才能判斷從外部資料表處理的資料量。執行聯合查詢會產生處理這項資料的費用。
- 您無法在外部資料表中將
_object_metadata做為資料欄名稱。此名稱已保留供內部使用。 - BigQuery 不支援顯示外部資料表的資料表儲存空間統計資料。
- 外部資料表不支援彈性資料欄名稱。
- BI Engine 不支援查詢外部資料表。
- BigQuery 不支援使用 Data Boost 從 BigQuery 讀取 Bigtable 資料。
- BigQuery 不支援外部資料表的時空旅行或容錯資料保留期限。不過,對於 Apache Iceberg 外部資料表,您可以使用
FOR SYSTEM_TIME AS OF子句,存取 Iceberg 中繼資料保留的快照。 - 適用所有格式的特定限制:
位置注意事項
選擇外部資料表的位置時,您需要同時考量 BigQuery 資料集和外部資料來源的位置。
Cloud Storage
使用 BigLake 或非 BigLake 外部資料表查詢 Cloud Storage 中的資料時,值區必須與包含外部資料表定義的 BigQuery 資料集位於相同位置。例如:
-
如果 Cloud Storage bucket 位於
us-central1(愛荷華州) 區域,BigQuery 資料集必須位於us-central1(愛荷華州) 區域或US多區域。如果 Cloud Storage bucket 位於
europe-west4(荷蘭) 區域,BigQuery 資料集必須位於europe-west4(荷蘭) 區域或EU多區域。如果 Cloud Storage bucket 位於
europe-west1(比利時) 地區,對應的 BigQuery 資料集也必須位於europe-west1(比利時) 或EU多區域。 -
如果 Cloud Storage bucket 位於
NAM4預先定義的雙區域,或包含us-central1(愛荷華州) 區域的任何可設定雙區域,對應的 BigQuery 資料集必須位於us-central1(愛荷華州) 區域或US多區域。如果 Cloud Storage bucket 位於
EUR4預先定義的雙區域或任何包含europe-west4(荷蘭) 區域的可設定雙區域,對應的 BigQuery 資料集必須位於europe-west4(荷蘭) 區域或EU多區域。如果 Cloud Storage bucket 位於
ASIA1預先定義的雙重區域,對應的 BigQuery 資料集必須位於asia-northeast1(東京) 或asia-northeast2(大阪) 區域。如果 Cloud Storage bucket 使用包含
australia-southeast1(雪梨) 和australia-southeast2(墨爾本) 區域的可設定雙區域,對應的 BigQuery bucket 必須位於australia-southeast1(雪梨)或australia-southeast2(墨爾本) 區域。 -
不建議搭配使用多區域資料集位置和多區域 Cloud Storage bucket,因為外部查詢效能取決於最低延遲和最佳網路頻寬。
如果 BigQuery 資料集位於
US多區域,對應的 Cloud Storage bucket 必須位於US多區域、單一區域us-central1(愛荷華州),或包含us-central1(愛荷華州) 的雙區域,例如NAM4雙區域,或包含us-central1的可設定雙區域。如果 BigQuery 資料集位於
EU多區域,對應的 Cloud Storage bucket 必須位於EU多區域、單一區域europe-west1(比利時) 或europe-west4(荷蘭),或是包含europe-west1(比利時) 或europe-west4(荷蘭) 的雙區域,例如EUR4雙區域,或是包含europe-west1或europe-west4的可設定雙區域。
如要進一步瞭解支援的 Cloud Storage 位置,請參閱 Cloud Storage 說明文件中的「值區位置」。
Bigtable
透過 BigQuery 外部資料表查詢 Bigtable 中的資料時,Bigtable 執行個體必須與 BigQuery 資料集位於相同位置:
- 單一區域:如果 BigQuery 資料集位於比利時 (
europe-west1) 區域位置,對應的 Bigtable 執行個體必須位於比利時區域。 - 多區域:外部查詢效能取決於最低延遲時間和最佳網路頻寬,因此不建議在 Bigtable 上使用多區域資料集位置的外部資料表。
如要進一步瞭解支援的 Bigtable 位置,請參閱「Bigtable 位置」。
Google 雲端硬碟
位置考量不適用於 Google 雲端硬碟外部資料來源。
在不同位置之間移動資料
如要手動將資料集從一個位置移至另一個位置,請按照下列步驟操作:
-
將資料從 BigQuery 資料表匯出至 Cloud Storage bucket。
從 BigQuery 中匯出資料並不需要付費,但是在 Cloud Storage 儲存匯出的資料則會產生費用。BigQuery Export 須遵守擷取作業的限制。
-
將匯出 Cloud Storage bucket 中的資料複製或移至您在目的地位置建立的新 bucket。舉例來說,如果您要將資料從
US多區域移至asia-northeast1東京區域,請將資料轉移至您在東京建立的 bucket。如要瞭解如何轉移 Cloud Storage 物件,請參閱 Cloud Storage 說明文件中的「複製、重新命名及移動物件」。在區域之間移轉資料時,Cloud Storage 會產生網路輸出費用。
-
在新位置建立新的 BigQuery 資料集,然後將資料從 Cloud Storage bucket 載入新資料集。
將資料載入 BigQuery 無須支付費用,但將資料儲存於 Cloud Storage 則須支付費用,直到您刪除資料或值區為止。載入資料之後,將資料儲存至 BigQuery 亦須支付相關費用。將資料載入 BigQuery 時,須遵守載入作業限制。
您也可以使用 Managed Service for Apache Airflow,以程式輔助方式移動及複製大型資料集。
如要進一步瞭解如何使用 Cloud Storage 儲存及移動大型資料集,請參閱「搭配大數據使用 Cloud Storage」。
最佳化 Cloud Storage 外部資料表查詢
如要提升效能,並在透過外部資料表查詢 Cloud Storage 中的資料時盡可能降低成本,請考慮啟用 Rapid Cache。
Rapid Cache 可為 Cloud Storage bucket 提供 SSD 型可用區讀取快取。啟用後,BigQuery 會運用快速快取服務物件讀取要求,為您提供下列優點:
- 提升查詢效能:加快從 Cloud Storage 讀取資料的速度,以利 BigQuery 工作負載運作。
- 降低網路資料移轉成本:多區域 bucket 支援的 BigQuery 工作負載可降低資料移轉費用。從快取讀取資料產生的網路費用,比直接從多區域 bucket 讀取資料還低。
BigQuery 是區域服務,但其基礎運算資源可能會在區域內的可用區之間轉移,以進行負載平衡,因此建議您在執行 BigQuery 工作負載的區域內,啟用所有可用區的 Rapid Cache。這樣一來,無論 BigQuery 運算使用哪個區域,都能確保快取執行個體可用。詳情請參閱「Rapid Cache 定價」。
如要判斷 Rapid Cache 是否適合你,建議使用 Rapid Cache 建議工具。Rapid Cache 建議工具會分析您的數據用量和儲存空間,針對 bucket 與可用區組合提供快取建立建議和洞察資料。
定價
從 BigQuery 查詢外部資料表時,系統會根據您使用的 BigQuery 以量計價 (每 TiB) 模式,收取查詢費用和適用的讀取位元組費用;如果使用 BigQuery 容量 (每運算單元小時) 計價模式,則會收取運算單元消耗量費用。
如果資料儲存在 Cloud Storage 的 ORC 或 Parquet 中,請參閱「資料大小計算」。
系統也會依據應用程式的價格規定,針對來源應用程式所儲存的資料和使用的任何資源,向您收費:
如要瞭解 Cloud Storage 定價,請參閱「Cloud Storage 定價」。Cloud Storage 費用可能包括:
如要瞭解 Bigtable 定價,請參閱「定價」。
如要瞭解 Google 雲端硬碟的價格,請參閱「定價」。
後續步驟
- 瞭解如何建立 Bigtable 外部資料表。
- 瞭解如何建立 Cloud Storage 外部資料表。
- 瞭解如何建立雲端硬碟外部資料表。
- 瞭解如何使用 Knowledge Catalog 排定及執行資料品質檢查。