外部資料表的中繼資料快取

本文說明如何使用中繼資料快取 (又稱為欄中繼資料索引),改善物件資料表和某些類型的 BigLake 資料表的查詢效能。

物件資料表和某些類型的 BigLake 資料表可快取外部資料儲存空間 (例如 Cloud Storage) 中檔案的結構描述資料。下列 BigLake 資料表類型支援中繼資料快取:

  • Amazon S3 BigLake 資料表
  • Cloud Storage BigLake 資料表

中繼資料包含檔案名稱、分割資訊,以及檔案的中繼資料,例如列數。您可以選擇是否要在資料表上啟用中繼資料快取功能。含有大量檔案和 Hive 區隔篩選器的查詢,最能從中繼資料快取作業中受益。

如果您未啟用中繼資料快取功能,資料表上的查詢必須讀取外部資料來源,才能取得物件中繼資料。讀取這類資料會增加查詢延遲時間,從外部資料來源列出數百萬個檔案可能需要幾分鐘的時間。啟用中繼資料快取功能後,查詢作業就能避免列出外部資料來源中的檔案,並且能更快速地分割及刪除檔案。

您可以在建立資料表時,為 BigLake 或物件資料表啟用中繼資料快取功能。如要進一步瞭解如何建立物件資料表,請參閱「建立物件資料表」。如要進一步瞭解如何建立 BigLake 資料表,請參閱下列任一主題:

中繼資料快取設定

有兩個屬性可用來控制這項功能的行為:

  • 最大過時時間:指定查詢使用快取中繼資料的時間。
  • 「中繼資料快取模式」會指定中繼資料的收集方式。

啟用中繼資料快取功能後,您可以指定中繼資料過時的最大間隔,以便針對資料表執行作業。舉例來說,如果您指定 1 小時的間隔,則如果表格在過去 1 小時內已重新整理,針對該表格的作業會使用快取中繼資料。如果快取的結構描述資料比這還舊,作業會改為從資料儲存庫 (Amazon S3 或 Cloud Storage) 擷取結構描述資料。您可以指定 30 分鐘至 7 天的過時間隔。

您可以選擇自動或手動重新整理快取:

  • 自動重新整理功能會按照系統定義的間隔時間 (通常為 30 到 60 分鐘) 重新整理快取。如果資料儲存庫中的檔案會在隨機間隔下新增、刪除或修改,自動重新整理快取是一個不錯的做法。如果您需要控制重新整理的時間點 (例如在擷取-轉換-載入工作結束時觸發重新整理),請使用手動重新整理。
  • 如要手動重新整理,請執行 BQ.REFRESH_EXTERNAL_METADATA_CACHE 系統程序,根據您指定的時間表重新整理中繼資料快取。針對 BigLake 資料表,您可以提供資料表資料目錄的子目錄,選擇性地重新整理中繼資料。這麼做可避免不必要的中繼資料處理作業。如果資料儲存庫中的檔案會在已知的間隔時間內新增、刪除或修改 (例如管線的輸出內容),手動重新整理快取是個不錯的做法。

手動和自動快取重新整理作業都會以 INTERACTIVE 查詢優先順序執行。

如果您選擇使用自動重新整理功能,建議您建立預留,然後為執行中繼資料快取重新整理工作的專案,建立使用 BACKGROUND 工作類型的指派。這可避免重新整理工作與使用者查詢資源產生競爭,並在可用資源不足時避免失敗。

設定過時間隔和中繼資料快取模式值前,請先考量兩者之間的互動方式。請見以下範例:

  • 如果資料表的中繼資料快取設為需要手動重新整理,且失效間隔設為 2 天,則如果您希望針對資料表的作業使用快取中繼資料,就必須每 2 天或更短時間執行 BQ.REFRESH_EXTERNAL_METADATA_CACHE 系統程序。
  • 如果資料表的中繼資料快取設為自動重新整理,且失效間隔設為 30 分鐘,如果中繼資料快取重新整理作業需要的時間超過一般 30 到 60 分鐘的時間範圍,則針對資料表執行的部分作業可能會從資料儲存庫讀取。

如要進一步瞭解如何為 BigLake 資料表設定中繼資料快取選項,請參閱「建立 Amazon S3 BigLake 外部資料表」或「為 Cloud Storage 建立 BigLake 外部資料表」。

如要進一步瞭解如何設定物件資料表的中繼資料快取選項,請參閱「建立物件資料表」。

取得中繼資料快取重新整理工作相關資訊

如要查看中繼資料快取重新整理工作相關資訊,請查詢 INFORMATION_SCHEMA.JOBS 檢視區塊,如以下範例所示:

SELECT *
FROM `region-us.INFORMATION_SCHEMA.JOBS`
WHERE job_id LIKE '%metadata_cache_refresh%'
AND creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 6 HOUR)
ORDER BY start_time DESC
LIMIT 10;

使用客戶管理的加密金鑰搭配快取的結構描述

快取的結構描述會受到客戶代管的加密金鑰 (CMEK) 保護,該金鑰用於與快取的結構描述相關聯的資料表。這可能是直接套用至資料表的 CMEK,或是資料表從資料集或專案繼承的 CMEK。

如果為專案或資料集設定預設 CMEK,或是變更專案或資料集現有的 CMEK,這不會影響現有資料表或其快取的中繼資料。您必須變更資料表的鍵,才能將新鍵套用至資料表及其快取的中繼資料。

在 BigQuery 中建立的 CMEK 不適用於 BigLake 和物件資料表使用的 Cloud Storage 檔案。如要取得端對端 CMEK 加密功能,請為這些檔案在 Cloud Storage 中設定 CMEK

取得查詢工作使用中繼資料快取的相關資訊

如要取得查詢工作中繼資料快取用量相關資訊,請為該工作呼叫 jobs.get 方法,並查看 Job 資源的 JobStatistics2 區段中的 MetadataCacheStatistics 欄位。這個欄位會提供資訊,說明查詢使用了哪些支援中繼資料快取的表格、查詢是否使用了中繼資料快取,以及如果沒有使用,則說明原因。

表格統計資料

對於以 Parquet 檔案為基礎的 BigLake 資料表,系統會在重新整理中繼資料快取時收集資料表統計資料。系統會在自動和手動重新整理期間收集資料表統計資料,統計資料會與中繼資料快取一併保留。

收集的資料表統計資料包括檔案資訊,例如列數、實體和未壓縮的檔案大小,以及欄的基數。當您在以 Parquet 為基礎的 BigLake 資料表上執行查詢時,這些統計資料會提供給查詢最佳化工具,以便進行更完善的查詢規劃,並可能改善某些類型查詢的查詢效能。舉例來說,動態限制傳播是常見的查詢最佳化方式,在這種情況下,查詢最佳化工具會從較小的維度資料表,動態推斷大型事實資料表中的預設條件。雖然這項最佳化功能可透過使用標準化表格結構定義加快查詢速度,但需要準確的資料表統計資料。中繼資料快取收集的資料表統計資料,可讓您在 BigQuery 和 Apache Spark 中進一步最佳化查詢計畫。

限制

以下限制適用於中繼快取:

  • 如果您同時發出多個手動重新整理要求,只有其中一個會成功。
  • 如果未重新整理,中繼資料快取會在 7 天後過期。
  • 如果您更新資料表的來源 URI,中繼資料快取不會自動重新整理,後續查詢會傳回來自過時快取的資料。如要避免這種情況,請手動重新整理中繼資料快取。如果表格的中繼資料快取已設為自動重新整理,您必須將表格的重新整理模式改為手動,執行手動重新整理,然後將表格的重新整理模式再次設為自動。
  • 如果您要手動重新整理中繼資料快取,且目標資料集和 Cloud Storage 值區位於地區位置,則在執行 BQ.REFRESH_EXTERNAL_METADATA_CACHE 程序呼叫時,您必須明確指定這個位置。您可以選擇下列其中一種操作方式:

    主控台

    1. 前往「BigQuery」頁面

      前往 BigQuery

    2. 在編輯器中選取分頁。

    3. 依序按一下 「More」和「Query settings」

    4. 在「Advanced options」部分,取消勾選「Automatic location selection」核取方塊,然後指定目標區域。

    5. 按一下 [儲存]

    6. 在該編輯器分頁中,執行包含 BQ.REFRESH_EXTERNAL_METADATA_CACHE 程序呼叫的查詢。

    bq

    如果您使用 bq query 執行包含 BQ.REFRESH_EXTERNAL_METADATA_CACHE 程序呼叫的查詢,請務必指定 --location 旗標

後續步驟