BigQuery 資料表的中繼資料索引
BigQuery 會自動為大於 1 GiB 的 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。
按一下「 執行」。
查看資料欄中繼資料索引使用情形
如要查看工作完成後是否使用資料欄中繼資料索引,請檢查工作資源的 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;
設定專屬索引資源
如要在專案中設定中繼資料索引更新資源,您必須先將預留項目指派給專案。方法很簡單,按照以下步驟操作即可:
- 建立
BACKGROUND預留項目。BACKGROUND預留項目會在背景最佳化工作中分享資源。 - 將專案指派給預留項目。
設定預留項目後,請選取下列其中一種方法,將運算單元指派給中繼資料索引工作。根據預設,如果以這種方式分配的運算單元處於閒置狀態,則會與其他工作共用。詳情請參閱「閒置運算單元」。
控制台
前往 Google Cloud 控制台的「Workload management」(工作負載管理) 頁面。
依序點選「」>「Create assignment」(建立指派作業)。
選取預留項目專案。
將「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');
按一下「 執行」。
查看索引工作資訊
設定專屬索引工作後,您可以使用 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%。您可以針對特定預留項目或所有背景預留項目設定這項警告。觸發這項快訊時,建議您增加預留項目大小。
如要為每個背景預留項目設定這項警告,請按照下列步驟操作:
- 如果尚未設定 Monitoring 通知管道,請先完成設定。
前往「Integrations」(整合) 頁面。
找到 BigQuery 整合項目,然後點選「查看詳細資料」。
在「Alerts」(快訊) 分頁中,選取「Slot Usage - Background Metadata Cache Slot Usage Too High」(運算單元用量 - 背景中繼資料快取運算單元用量過高)。
選用:如要進一步自訂這項警告,請依序點選 「Show options」(顯示選項) >「Customize alert policy」(自訂警告政策)。
在「設定通知」部分,選取通知管道。
點選「建立」。
過時警示
如果資料欄中繼資料索引的平均過時程度,比現有平均值高出太多,這項快訊就會通知您。預設門檻為 4 小時內的平均值超過先前平均值的兩倍,且持續超過 30 分鐘。觸發這項警告時,建議您增加預留項目大小,或建立背景預留項目 (如果尚未建立)。
如要設定這項警告,請按照下列步驟操作:
- 如果尚未設定 Monitoring 通知管道,請先完成設定。
前往「Integrations」(整合) 頁面。
找到 BigQuery 整合項目,然後點選「查看詳細資料」。
在「Alerts」(快訊) 分頁中,選取「Column Metadata Index Staleness - Too Much Percent Increase」(資料欄中繼資料索引過時程度 - 百分比增幅過高)。
選用:如要進一步自訂這項警告,請依序點選 「Show options」(顯示選項) >「Customize alert policy」(自訂警告政策)。
在「設定通知」部分,選取通知管道。
點選「建立」。
效能注意事項
雖然 BigQuery 會使用分區和分群功能自動剪除資料,但中繼資料索引功能可根據未用於分區或分群的資料欄剪除資料,進一步最佳化查詢。如果篩選條件欄與資料表的分割或分群欄之間存在排序依附關係,則這種剪枝作業的成效會提高。在這種情況下,即使篩選的資料欄並非資料表分群設定的一部分,掃描的位元組數仍可能低於預期。如果資料表僅分區但未分群,則隨選查詢的剪除效果有限,且掃描的位元組數可能不會減少。
限制
中繼資料查詢效能強化功能僅適用於 SELECT、INSERT 和 CREATE TABLE AS SELECT 陳述式。data manipulation language (DML) 陳述式不會因中繼資料索引而提升效能。
後續步驟
- 瞭解如何使用
JOBS檢視畫面查看專案中的所有工作。 - 瞭解如何查看運算單元容量和使用率。