使用 BigQuery 進階執行階段

本文說明如何啟用及停用 BigQuery 進階執行階段,以及如何評估進階執行階段對查詢效能的影響。

角色和權限

如要取得指定設定所需的權限,請要求管理員授予您專案或機構的 BigQuery 管理員 (roles/bigquery.admin) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

您或許還可透過自訂角色或其他預先定義的角色取得必要權限。

功能

在 BigQuery 專案中啟用進階執行階段後,查詢處理器就會開啟相關功能,以減少查詢延遲和運算單元耗用量,且不會產生額外費用。

強化向量化

向量化執行作業是一種查詢處理模型,可處理與 CPU 快取大小一致的資料區塊,並使用單指令多資料 (SIMD) 指令。強化向量化功能可將 BigQuery 中的向量化查詢執行作業,擴展至查詢處理的下列層面:

  • 透過運用 Capacitor 儲存格式中的專用資料編碼,即可對編碼資料執行篩選器評估作業。
  • 專用編碼會透過查詢計畫傳播,因此在資料編碼時,系統就能處理更多資料。
  • BigQuery 實作運算式摺疊功能來評估決定性函式和常數運算式,可將複雜述詞簡化為常數值。

短查詢最佳化

BigQuery 通常會在分散式環境中執行查詢,並使用隨機播放中繼層。短查詢最佳化 動態識別可做為單一階段執行的查詢,縮短延遲時間並減少運算單元用量。如果查詢是在單一階段執行,就能更有效地使用專用編碼。搭配選用工作建立模式使用時,這些最佳化措施最有效,可將工作啟動、維護和結果擷取延遲時間降到最低。

短查詢最佳化功能的適用資格不固定,會受到下列因素影響:

  • 預測的資料掃描大小。
  • 所需資料移動量。
  • 查詢篩選器的選擇性。
  • 儲存空間中資料的類型和實體配置。
  • 整體查詢結構。
  • 過去查詢執行的歷史統計資料

啟用進階執行階段

如要為專案或機構啟用進階執行階段,請使用 ALTER PROJECTALTER ORGANIZATION 陳述式變更預設設定。在陳述式中,將 query_runtime 引數設為 'advanced'。例如:

ALTER PROJECT PROJECT_NAME
SET OPTIONS (
  `region-LOCATION.query_runtime` = 'advanced'
);

更改下列內容:

  • PROJECT_NAME:專案名稱
  • LOCATION:專案的位置

變更可能需要幾分鐘才會生效。

啟用進階執行階段後,專案或機構中的合格查詢就會使用進階執行階段,無論查詢作業是由哪位使用者建立都一樣。

停用進階執行階段

如要為專案或機構停用進階執行階段,請使用 ALTER PROJECTALTER ORGANIZATION 陳述式變更預設設定。在陳述式中,將 query_runtime 引數設為 NULL。例如:

ALTER PROJECT PROJECT_NAME
SET OPTIONS (
  `region-LOCATION.query_runtime` = NULL
);

更改下列內容:

  • PROJECT_NAME:專案名稱
  • LOCATION:專案的位置

變更可能需要幾分鐘才會生效。

評估查詢效能

您可以使用管理工作探索器INFORMATION_SCHEMA檢視畫面,評估進階執行階段對查詢執行時間和運算單元用量的影響。

請按照下列步驟評估啟用和未啟用進階執行階段時的查詢效能:

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

    前往「BigQuery」

  2. 在查詢編輯器中開啟新分頁。

  3. 停用該查詢分頁的快取查詢結果

  4. 在查詢分頁中輸入或複製測試查詢。

  5. 執行測試查詢幾次,建立基準效能。每次執行後,請依下列方式判斷查詢效能指標:

    1. 在管理工作探索器中查看查詢執行詳細資料
    2. 在新的查詢分頁中執行下列查詢,從 INFORMATION_SCHEMA.JOBS_BY_USER 檢視畫面 擷取工作成效資料:

      SELECT
          job_id,
          end_time - start_time AS duration,
          total_slot_ms,
          query
      FROM
        `region-us`.INFORMATION_SCHEMA.JOBS_BY_USER
      WHERE
          creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
          AND job_type='QUERY'
          AND total_slot_ms IS NOT NULL
      ORDER BY
          creation_time DESC,
          query ASC
      LIMIT 1000;
      
  6. 啟用進階執行階段

  7. 重複步驟 5。

  8. 比較啟用進階執行階段前後的測試查詢查詢延遲時間和時段用量指標。