BigQuery 資料表的中繼資料索引

本文將說明 BigQuery 中的資料欄中繼資料索引,並說明如何分配專屬資源,以提升索引新鮮度和查詢效能。

BigQuery 會自動為超過 1 GB 的 BigQuery 資料表建立中繼資料索引。這類中繼資料包括檔案位置、區隔資訊和資料欄層級屬性,BigQuery 會使用這些資訊來最佳化及加快查詢速度。

根據預設,BigQuery 中的中繼資料索引是免費的背景作業,您不必採取任何行動。不過,索引新鮮度取決於可用的免費資源,且沒有效能服務等級目標 (SLO)。如果索引新鮮度對您的用途至關重要,建議您設定 BACKGROUND 保留空間

查看中繼資料索引的重新整理時間

如要查看資料表的最新中繼資料索引更新時間,請查詢 INFORMATION_SCHEMA.TABLE_STORAGE 檢視畫面LAST_METADATA_INDEX_REFRESH_TIME 欄。如要這樣做,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往 BigQuery

  2. 在查詢編輯器中輸入以下陳述式:

    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
  3. 按一下 「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;

設定專用索引資源

如要在專案中設定資源,以便進行繼資料索引更新,您必須先將預訂指派給專案。如要這樣做,請按照下列步驟操作:

  1. 建立BACKGROND預留項目
  2. 將專案指派給預留項目

設定預留作業後,請選取下列其中一種方法,為中繼資料索引工作指派時段。根據預設,如果運算單元閒置,系統會與其他工作共用以這種方式分配的運算單元。詳情請參閱「閒置時段」。

主控台

  1. 在 Google Cloud 控制台中,前往「Capacity Management」頁面。

    前往「容量管理」頁面

  2. 依序點選 「預留動作」>「建立作業」

  3. 選取預留專案。

  4. 將「Job Type」(工作類型) 設為「Background」(背景)

  5. 按一下 [建立]。

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

更改下列內容:

  • ADMIN_PROJECT_ID:擁有預留資源的管理專案專案 ID。
  • LOCATION:預訂的地點
  • RESERVATION_NAME:保留項目的名稱。
  • PROJECT_ID:要指派給此預留項目的專案 ID。

SQL

如要將預留項目指派給專案,請使用 CREATE ASSIGNMENT DDL 陳述式

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往 BigQuery

  2. 在查詢編輯器中輸入以下陳述式:

    CREATE ASSIGNMENT
    ADMIN_PROJECT_ID.region-LOCATION.RESERVATION_NAME.ASSIGNMENT_ID
    OPTIONS (
      assignee = 'projects/PROJECT_ID',
      job_type = 'BACKGROUND');
    取代下列內容:

    • ADMIN_PROJECT_ID:擁有預留資源的管理專案專案 ID。
    • LOCATION:預訂的地點
    • RESERVATION_NAME:保留項目的名稱。
    • ASSIGNMENT_ID:作業的 ID。ID 必須是專案和位置的專屬 ID,開頭和結尾必須是小寫英文字母或數字,且只能包含小寫英文字母、數字和破折號。
    • PROJECT_ID:包含資料表的專案 ID。這項專案會指派給預留項目。
  3. 按一下 「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%。您可以針對特定預訂或每個背景預訂設定這項快訊。這項警示觸發時,建議您增加預訂量

如要為每個背景預留動作設定這項快訊,請按照下列步驟操作:

  1. 如果尚未設定監控通知管道,請先完成這項設定。
  2. 前往「Integrations」頁面。

    前往「整合」

  3. 找出 BigQuery 整合功能,然後按一下「查看詳細資料」

  4. 在「警示」分頁中,選取「Slot Usage - Background Metadata Cache Slot Usage Too High」

  5. 選用:如要進一步自訂這則警示,請依序點選「顯示選項」>「自訂警示政策」

  6. 在「Configure notifications」(設定通知) 下方,選取通知管道。

  7. 按一下 [建立]。

過時警報

如果平均欄後設資料索引的陳舊程度與現有平均值相比增加過多,系統就會發出這則快訊通知。預設門檻為,如果 4 小時的平均值超過前一個平均值的 2 倍,且持續超過 30 分鐘,這則警示觸發時,建議您增加預訂量,或建立背景預訂 (如果您尚未建立)。

如要設定這項快訊,請執行下列操作:

  1. 如果尚未設定監控通知管道,請先完成這項設定。
  2. 前往「Integrations」頁面。

    前往「整合」

  3. 找出 BigQuery 整合功能,然後按一下「查看詳細資料」

  4. 在「警示」分頁中,選取「資料欄中索引的過時程度 - 百分比增加幅度過大」

  5. 選用:如要進一步自訂這則警示,請依序點選「顯示選項」>「自訂警示政策」

  6. 在「Configure notifications」(設定通知) 下方,選取通知管道。

  7. 按一下 [建立]。

限制

中繼資料查詢效能強化功能僅適用於 SELECTINSERTCREATE TABLE AS SELECT 陳述式。資料操縱語言 (DML) 陳述式不會因中繼資料索引而改善。

後續步驟