外部資料表的中繼資料快取
本文說明如何使用中繼資料快取 (又稱資料欄中繼資料索引),提升物件資料表和部分 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系統程序,才能讓針對資料表執行的作業使用快取中繼資料。 - 如果資料表的 metadata 快取設定為自動重新整理,且過時間隔設為 30 分鐘,當 metadata 快取重新整理時間較長 (通常為 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程序呼叫時,必須明確指定這個位置。你可以透過下列任一方式執行此操作:控制台
前往「BigQuery」頁面
在編輯器中選取分頁標籤。
按一下「更多」,然後按一下「查詢設定」。
在「位置」部分,取消勾選「自動選取位置」核取方塊,然後指定目標區域。
按一下 [儲存]。
在該編輯器分頁中,執行包含
BQ.REFRESH_EXTERNAL_METADATA_CACHE程序呼叫的查詢。
bq
如果使用
bq query執行含有BQ.REFRESH_EXTERNAL_METADATA_CACHE程序呼叫的查詢,請務必指定--location旗標。
後續步驟
- 進一步瞭解如何建立 Cloud Storage BigLake 資料表並快取中繼資料。
- 進一步瞭解如何建立含中繼資料快取的 Amazon S3 BigLake 資料表。
- 進一步瞭解如何建立物件資料表並快取中繼資料。
- 瞭解如何在啟用 BigLake 中繼資料快取的資料表上使用具體化檢視表。