外部資料表簡介

本文件說明如何在外部資料表中使用儲存在 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 資料提升功能,無法從 BigQuery 讀取 Bigtable 資料
  • BigQuery 不支援外部資料表的時間旅行或安全防護資料保留期間
  • 適用所有格式專屬限制:

位置注意事項

選擇外部資料表的儲存位置時,請同時考量 BigQuery 資料集和外部資料來源的儲存位置。

Cloud Storage

使用 BigLake非 BigLake 外部資料表查詢 Cloud Storage 中的資料時,值區必須與包含外部資料表定義的 BigQuery 資料集位於同一位置。例如:

  • 單一區域分桶

    如果 Cloud Storage 值區位於 us-central1 (Iowa) 區域,則 BigQuery 資料集必須位於 us-central1 (Iowa) 區域或 US 多地區值區。

    如果您的 Cloud Storage 值區位於 europe-west4 (荷蘭) 地區,則 BigQuery 資料集必須位於 europe-west4 (荷蘭) 或 EU 多地區。

    如果 Cloud Storage 值區位於 europe-west1 (比利時) 地區,則對應的 BigQuery 資料集也必須位於 europe-west1 (比利時) 地區。

  • 雙區域值區

    如果您的 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 值區,因為外部查詢效能取決於最短的延遲時間和最佳的網路頻寬。

    如果您的 BigQuery 資料集位於 US 多地區,則對應的 Cloud Storage 值區必須位於 US 多地區、包含 us-central1 (愛荷華州) 的雙地區 (例如 NAM4 雙地區),或是包含 us-central1 的可設定雙地區。

    如果您的 BigQuery 資料集位於 EU 多地區,則對應的 Cloud Storage 值區必須位於 EU 多地區、包含 europe-west4 (荷蘭) 的雙地區 (例如 EUR4 雙地區),或是包含 europe-west4 的可設定雙地區。

如要進一步瞭解支援的 Cloud Storage 位置,請參閱 Cloud Storage 說明文件中的「值區位置」一文。

Bigtable

透過 BigQuery 外部資料表查詢 Bigtable 中的資料時,Bigtable 執行個體必須與 BigQuery 資料集位於相同位置:

  • 單一地區:如果您的 BigQuery 資料集位於比利時 (europe-west1) 地區位置,則對應的 Bigtable 執行個體必須位於比利時地區。
  • 多區域:由於外部查詢效能取決於最短的延遲時間和最佳網路頻寬,因此不建議在 Bigtable 的外部資料表中使用多區域資料集位置。

如要進一步瞭解支援的 Bigtable 位置,請參閱「Bigtable 位置」。

Google 雲端硬碟

上述的位置注意事項不適用於 Google 雲端硬碟外部資料來源。

在不同位置之間移動資料

如要手動將資料集移至其他位置,請按照下列步驟操作:

  1. 將 BigQuery 資料表中的資料匯出至 Cloud Storage 值區。

    從 BigQuery 中匯出資料並不需要付費,但是在 Cloud Storage 儲存匯出的資料則會產生費用。BigQuery 匯出作業會受到匯出工作的相關限制。

  2. 從匯出 Cloud Storage 值區中複製或移動資料,然後匯出至您在目的地位置建立的新值區。舉例來說,如果您要將資料從 US 多地區位置移到 asia-northeast1 東京地區,則必須將資料移轉到您在東京建立的值區。如要瞭解如何轉移 Cloud Storage 物件,請參閱 Cloud Storage 說明文件中的「複製、重新命名及移動物件」一文。

    在不同地區之間轉移資料將導致 Cloud Storage 產生網路輸出費用

  3. 在新位置建立新的 BigQuery 資料集,然後將資料從 Cloud Storage 值區載入新資料集。

    將資料載入 BigQuery 無須支付費用,但將資料儲存於 Cloud Storage 則須支付費用,直到您刪除資料或值區為止。載入資料之後,將資料儲存至 BigQuery 亦須支付相關費用。將資料載入 BigQuery 時會受到載入工作限制。

您也可以使用 Cloud Composer,透過程式碼移動及複製大型資料集。

如要進一步瞭解如何使用 Cloud Storage 儲存及移動大型資料集,請參閱「搭配大數據使用 Cloud Storage」。

定價

從 BigQuery 查詢外部表格時,如果使用 BigQuery 以量計價 (每 TiB) 價格,系統會針對執行查詢作業和讀取的適用位元組收費;如果使用 BigQuery 容量 (每運算單元小時) 價格,則會針對運算單元用量收費。

如果資料是以 ORC 或 Parquet 格式儲存在 Cloud Storage 上,請參閱資料大小計算一節。

系統也會依據應用程式的價格規定,針對來源應用程式所儲存的資料和使用的任何資源,向您收費:

  • 如要進一步瞭解 Cloud Storage 價格,請參閱 Cloud Storage 定價一文。
  • 如要進一步瞭解 Bigtable 價格,請參閱「定價」一文。
  • 如要進一步瞭解 Google 雲端硬碟價格,請參閱「定價」一文。

後續步驟