外部資料表簡介
本文說明如何透過外部資料表,處理儲存在 BigQuery 外部的資料。如要使用外部資料來源,也可以使用外部資料集。
非 BigLake 外部資料表可讓您查詢外部資料儲存庫中的結構化資料。如要查詢非 BigLake 外部資料表,您必須同時具備外部資料表和外部資料來源的權限。舉例來說,如要查詢使用 Cloud Storage 中資料來源的非 BigLake 外部資料表,您必須具備下列權限:
bigquery.tables.getData
bigquery.jobs.create
storage.buckets.get
storage.objects.get
支援的資料儲存庫
您可以在下列資料儲存庫中使用非 BigLake 外部資料表:
支援臨時資料表
您可以在 BigQuery 中使用永久資料表或臨時資料表查詢外部資料來源。永久資料表是在資料集中建立並連結至外部資料來源的資料表。由於資料表為永久性,因此您可以使用存取權控管機制,將資料表分享給其他同樣具備基礎外部資料來源存取權的使用者,而且您可以隨時查詢此資料表。
使用臨時資料表查詢外部資料來源時,您必須提交內含查詢的指令,並建立連結至外部資料來源的非永久資料表。使用臨時資料表時,不用在 BigQuery 資料集內建立資料表。因為資料表不會永久儲存在資料集中,所以無法與其他使用者分享。使用臨時資料表查詢外部資料來源,對於臨時的一次性外部資料查詢作業,或對擷取、轉換和載入 (ETL) 程序而言非常有用。
多個來源檔案
如果您根據 Cloud Storage 建立非 BigLake 外部資料表,只要這些資料來源具有相同結構定義,您就能使用多個外部資料來源。以 Bigtable 或 Google 雲端硬碟為基礎的非 BigLake 外部資料表不支援這項功能。
限制
外部資料表有下列限制:
- BigQuery 不保證外部資料表中的資料一致性。如果基礎資料在查詢執行期間遭到變更,可能會導致非預期的行為。
- 與查詢標準 BigQuery 資料表中的資料相比,查詢外部資料表的效能可能較慢。如果以查詢速度為優先要務,請將資料載入 BigQuery,而不要設定外部資料來源。就含有外部資料表的查詢而言,效能取決於外部儲存空間類型。舉例來說,查詢儲存在 Cloud Storage 中的資料會比查詢 Google 雲端硬碟中的資料快。一般來說,外部資料表的查詢效能應與直接從資料來源讀取資料的效能相同。
- 您無法使用 DML 或其他方法修改外部資料表。外部資料表在 BigQuery 中為唯讀。
- 您無法使用
TableDataList
JSON API 方法從外部資料表擷取資料。詳情請參閱tabledata.list
。如要解決這項限制,您可以將查詢結果儲存在目標資料表中。然後,對結果資料表使用TableDataList
方法。 - 您無法執行從外部資料表匯出資料的 BigQuery 工作。如要解決這項限制,您可以將查詢結果儲存在目標資料表中。然後,對結果資料表執行匯出工作。
- 您無法複製外部資料表。
- 您無法在萬用字元資料表查詢中參照外部資料表。
- 外部資料表不支援叢集功能。這類資料庫支援以有限的方式進行分割。詳情請參閱「查詢外部分區資料」。
- 查詢 Cloud Storage 以外的外部資料來源時,系統不會將結果建立快取。(支援對 Cloud Storage 執行 GoogleSQL 查詢)。 每次查詢外部資料表,系統均會向您收費,即使您是發出多次相同的查詢也一樣。如果您需要對不常變更的外部資料表重複發出查詢,請考慮將查詢結果寫入永久性資料表,然後改對永久性資料表執行查詢。
- 您最多只能對單一 Bigtable 外部資料來源執行 16 個並行查詢。
- 即使傳回資料列,使用外部資料表的聯合查詢試算也可能回報 0 位元組的資料下限。這是因為系統要等到實際查詢完成,才能判斷從外部資料表處理的資料量。執行同盟查詢會產生處理這項資料的費用。
- 您無法在外部資料表中使用
_object_metadata
做為資料欄名稱。此名稱已保留供內部使用。 - BigQuery 不支援顯示外部資料表的資料表儲存空間統計資料。
- 外部資料表不支援彈性資料欄名稱。
- BI Engine 不支援查詢外部資料表。
- BigQuery 不支援Spanner 的 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 值區位於
europe-west4
(荷蘭) 地區,BigQuery 資料集就必須位於europe-west4
(荷蘭) 或EU
多地區。如果 Cloud Storage 值區位於
europe-west1
(比利時) 地區,對應的 BigQuery 資料集也必須位於europe-west1
(比利時) 或EU
多地區。 -
如果 Cloud Storage 值區位於
NAM4
預先定義的雙區域,或任何包含us-central1
(愛荷華州) 區域的可設定雙區域,對應的 BigQuery 資料集就必須位於us-central1
(愛荷華州) 區域或US
多區域。如果 Cloud Storage 值區位於
EUR4
預先定義的雙地區,或包含europe-west4
(荷蘭) 地區的任何可設定雙地區,對應的 BigQuery 資料集必須位於europe-west4
(荷蘭) 地區或EU
多地區。如果 Cloud Storage 值區位於
ASIA1
預先定義的雙重區域,對應的 BigQuery 資料集就必須位於asia-northeast1
(東京) 或asia-northeast2
(大阪) 區域。如果 Cloud Storage 值區使用可設定的雙區域,且包含
australia-southeast1
(雪梨) 和australia-southeast2
(墨爾本) 區域,對應的 BigQuery 值區就必須位於australia-southeast1
(雪梨)或australia-southeast2
(墨爾本) 區域。 -
不建議搭配使用多區域資料集位置和多區域 Cloud Storage bucket,因為外部查詢效能取決於最低延遲時間和最佳網路頻寬。
如果 BigQuery 資料集位於
US
多地區,對應的 Cloud Storage 值區必須位於US
多地區、單一地區us-central1
(愛荷華州),或包含us-central1
(愛荷華州) 的雙地區,例如NAM4
雙地區,或包含us-central1
的可設定雙地區。如果 BigQuery 資料集位於
EU
多地區,對應的 Cloud Storage 值區必須位於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 值區。
從 BigQuery 中匯出資料並不需要付費,但是在 Cloud Storage 儲存匯出的資料則會產生費用。BigQuery 匯出作業會受到匯出工作的相關限制。
-
從匯出 Cloud Storage 值區中,將資料複製或移動至您在目的地位置建立的新值區。舉例來說,如果您要將資料從
US
多地區移到asia-northeast1
東京地區,則必須把資料移轉到您在東京建立的值區。如要瞭解如何轉移 Cloud Storage 物件,請參閱 Cloud Storage 說明文件中的複製、重新命名及移動物件一文。在不同地區之間轉移資料將導致 Cloud Storage 產生網路輸出費用。
-
在新位置建立新的 BigQuery 資料集,然後將資料從 Cloud Storage bucket 載入新資料集。
將資料載入 BigQuery 無須支付費用,但將資料儲存於 Cloud Storage 則須支付費用,直到您刪除資料或值區為止。載入資料之後,將資料儲存至 BigQuery 亦須支付相關費用。將資料載入 BigQuery 時,必須遵守載入工作的相關限制。
您也可以使用 Cloud Composer,以程式輔助方式移動及複製大型資料集。
如要進一步瞭解如何使用 Cloud Storage 儲存及移動大型資料集,請參閱搭配大數據使用 Cloud Storage。
定價
透過 BigQuery 查詢外部資料表時,系統會根據您使用的計價方式收費:BigQuery 以量計價 (每 TiB) 或 BigQuery 容量 (每運算單元小時)。
如果資料是以 ORC 或 Parquet 格式儲存在 Cloud Storage 上,請參閱資料大小計算一節。
系統也會依據應用程式的價格規定,針對來源應用程式所儲存的資料和使用的任何資源,向您收費:
- 如要進一步瞭解 Cloud Storage 價格,請參閱 Cloud Storage 定價一文。
- 如要瞭解 Bigtable 價格,請參閱定價。
- 如要瞭解雲端硬碟價格,請參閱定價。
後續步驟
- 瞭解如何建立 Bigtable 外部資料表。
- 瞭解如何建立 Cloud Storage 外部資料表。
- 瞭解如何建立雲端硬碟外部資料表。
- 瞭解如何使用 Dataplex Universal Catalog 排定及執行資料品質檢查。