BigQuery 資料表的中繼資料索引
本文將說明 BigQuery 中的資料欄中繼資料索引,並說明如何分配專屬資源,以提升索引新鮮度和查詢效能。
BigQuery 會自動為超過 1 GB 的 BigQuery 資料表建立中繼資料索引。這類中繼資料包括檔案位置、區隔資訊和資料欄層級屬性,BigQuery 會使用這些資訊來最佳化及加快查詢速度。
根據預設,BigQuery 中的中繼資料索引是免費的背景作業,您不必採取任何行動。不過,索引新鮮度取決於可用的免費資源,且沒有效能服務等級目標 (SLO)。如果索引新鮮度對您的用途至關重要,建議您設定 BACKGROUND
保留空間。
查看中繼資料索引的重新整理時間
如要查看資料表的最新中繼資料索引更新時間,請查詢 INFORMATION_SCHEMA.TABLE_STORAGE
檢視畫面的 LAST_METADATA_INDEX_REFRESH_TIME
欄。如要這樣做,請按照下列步驟操作:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入以下陳述式:
SELECT project_id, project_number, table_name, last_metadata_index_refresh_time FROM [
PROJECT_ID
.]region-REGION
.INFORMATION_SCHEMA.TABLE_STORAGE;更改下列內容:
PROJECT_ID
: Google Cloud 專案的 ID。如果未指定,系統會使用預設專案。REGION
:專案所在的區域,例如region-us
。
按一下
「Run」。
查看資料欄中繼資料索引使用情形
如要查看工作完成後是否使用了資料欄中繼資料索引,請檢查 Job 資源的 TableMetadataCacheUsage
屬性。如果 unusedReason
欄位為空白 (未填入資料),系統會使用資料欄位索引。如果填入了這個值,隨附的 explanation
欄位會提供未使用資料欄中繼資料索引的原因。
您也可以在 INFORMATION_SCHEMA.JOBS
檢視畫面中,使用 metadata_cache_statistics
欄位查看資料欄中繼資料索引的用量。
舉例來說,以下是 my-job
工作中顯示的資料欄中繼資料索引用法:
SELECT metadata_cache_statistics FROM `region-US`.INFORMATION_SCHEMA.JOBS WHERE job_id = 'my-job';
以下是另一個���例,顯示使用 my-table
資料表資料欄中繼資料索引的工作數量:
SELECT COUNT(*) FROM `region-US`.INFORMATION_SCHEMA.JOBS, UNNEST(metadata_cache_statistics.table_metadata_cache_usage) AS stats WHERE stats.table_reference.table_id='my-table' AND stats.table_reference.dataset_id='my-dataset' AND stats.table_reference.project_id='my-project' AND stats.unusedReason IS NULL;
設定專用索引資源
如要在專案中設定資源,以便進行繼資料索引更新,您必須先將預訂指派給專案。如要這樣做,請按照下列步驟操作:
設定預留作業後,請選取下列其中一種方法,為中繼資料索引工作指派時段。根據預設,如果運算單元閒置,系統會與其他工作共用以這種方式分配的運算單元。詳情請參閱「閒置時段」。
主控台
在 Google Cloud 控制台中,前往「Capacity Management」頁面。
依序點選
「預留動作」>「建立作業」。選取預留專案。
將「Job Type」(工作類型) 設為「Background」(背景)。
按一下 [建立]。
bq
使用 bq mk
指令。
bq mk \ --project_id=ADMIN_PROJECT_ID \ --location=LOCATION \ --reservation_assignment \ --reservation_id=RESERVATION_NAME \ --assignee_id=PROJECT_ID \ --job_type=BACKGROUND \ --assignee_type=PROJECT
更改下列內容:
SQL
如要將預留項目指派給專案,請使用 CREATE ASSIGNMENT
DDL 陳述式。
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入以下陳述式:
取代下列內容:CREATE ASSIGNMENT ADMIN_PROJECT_ID.region-LOCATION.RESERVATION_NAME.ASSIGNMENT_ID OPTIONS ( assignee = 'projects/PROJECT_ID', job_type = 'BACKGROUND');
按一下
「Run」。
查看索引工作資訊
設定專屬索引工作後,您可以使用 JOBS
檢視畫面查看索引工作相關資訊。以下 SQL 範例會顯示 PROJECT_NAME 中五個最新的重新整理工作。
SELECT * FROM region-us.INFORMATION_SCHEMA.JOBS WHERE project_id = 'PROJECT_NAME' AND SEARCH(job_id, '`metadata_cache_refresh`') ORDER BY creation_time DESC LIMIT 5;
將 PROJECT_NAME
替換為包含結構化資料索引工作專案的名稱。
設定中繼資料索引警示
當 BigQuery 效能未達到既定條件時,Cloud Monitoring 快訊程序會通知您。詳情請參閱「快訊總覽」。您可以使用中繼資料索引,針對版位用量和過時情況設定快訊。
運算單元用量快訊
如果背景保留空間超過所分配的百分比,系統就會發出這則快訊通知。預設值為 95%。您可以針對特定預訂或每個背景預訂設定這項快訊。這項警示觸發時,建議您增加預訂量。
如要為每個背景預留動作設定這項快訊,請按照下列步驟操作:
- 如果尚未設定監控通知管道,請先完成這項設定。
前往「Integrations」頁面。
找出 BigQuery 整合功能,然後按一下「查看詳細資料」。
在「警示」分頁中,選取「Slot Usage - Background Metadata Cache Slot Usage Too High」。
選用:如要進一步自訂這則警示,請依序點選「顯示選項」>「自訂警示政策」。
在「Configure notifications」(設定通知) 下方,選取通知管道。
按一下 [建立]。
過時警報
如果平均欄後設資料索引的陳舊程度與現有平均值相比增加過多,系統就會發出這則快訊通知。預設門檻為,如果 4 小時的平均值超過前一個平均值的 2 倍,且持續超過 30 分鐘,這則警示觸發時,建議您增加預訂量,或建立背景預訂 (如果您尚未建立)。
如要設定這項快訊,請執行下列操作:
- 如果尚未設定監控通知管道,請先完成這項設定。
前往「Integrations」頁面。
找出 BigQuery 整合功能,然後按一下「查看詳細資料」。
在「警示」分頁中,選取「資料欄中索引的過時程度 - 百分比增加幅度過大」。
選用:如要進一步自訂這則警示,請依序點選「顯示選項」>「自訂警示政策」。
在「Configure notifications」(設定通知) 下方,選取通知管道。
按一下 [建立]。
限制
中繼資料查詢效能強化功能僅適用於 SELECT
、INSERT
和 CREATE TABLE AS SELECT
陳述式。資料操縱語言 (DML) 陳述式不會因中繼資料索引而改善。
後續步驟
- 瞭解如何透過
JOBS
檢視畫面查看專案中的所有工作。 - 瞭解如何查看運算單元數量和使用率。