BI Engine 簡介

BigQuery BI Engine 是速度飛快的記憶體內分析服務,可智慧快取最常使用的資料,藉此加快 BigQuery 中許多 SQL 查詢的速度。BI Engine 可加速處理來自任何來源的 SQL 查詢 (包括資料視覺化工具編寫的查詢),並管理快取資料表,持續進行最佳化。您不必手動調整或分層資料,就能提升查詢效能。您可以叢集分區資料表,進一步提升大型資料表的 BI Engine 效能。

舉例來說,如果資訊主頁只顯示上季資料,您可以按時間分割資料表,這樣系統只會將最新分割區載入記憶體。您也可以結合具體化檢視區塊和 BI Engine 的優點。如果具體化檢視區是用來聯結及平坦化資料,以最佳化 BI Engine 的結構,這個方法就特別有效。

BI Engine 具有下列優勢:

  • BigQuery API 相容性:BI Engine 會直接與 BigQuery API 整合。任何透過標準機制 (例如 RESTJDBC 和 ODBC 驅動程式) 使用 BigQuery API 的 BI 解決方案或自訂應用程式,都可以直接使用 BI Engine,不需進行任何修改。
  • 向量化執行階段:在執行引擎中使用向量化處理,一次處理一批資料,可更有效率地運用現代 CPU 架構。BI Engine 也會使用進階資料編碼 (具體來說是字典行程長度編碼),進一步壓縮儲存在記憶體內層的資料。
  • 完美整合:BI Engine 可與 BigQuery 功能和中繼資料搭配使用,包括授權檢視區塊、資料欄層級安全性及資料遮蓋。
  • 預留項目分配:BI Engine 預留項目會分別管理每個專案和區域的記憶體分配。BI Engine 只會快取查詢的必要資料欄和分區部分。您可以透過偏好資料表指定要使用 BI Engine 加速的資料表。

在大多數機構中,帳單管理員會啟用 BI Engine,並使用適當的版本預留 BI Engine 加速功能容量。詳情請參閱「預留 BI Engine 容量」。

BI Engine 用途

BI Engine 可大幅加快許多 SQL 查詢的速度,包括用於 BI 資訊主頁的查詢。如果您找出對查詢至關重要的資料表,然後將這些資料表標示為偏好資料表,加速功能就能發揮最大效益。如要使用 BI Engine,請在區域中建立預留項目,並指定大小。您可以讓 BigQuery 根據專案的使用模式決定要快取哪些資料表,也可以指定資料表,避免其他流量干擾加速作業。

BI Engine 適用於下列用途:

  • 使用 BI 工具分析資料:無論 BigQuery 查詢是在 BigQuery 控制台、Looker Studio 或 Tableau 等 BI 工具,還是用戶端程式庫、API,或是 ODBC 或 JDBC 連接器中執行,BI Engine 都能加速查詢。這項功能可大幅提升透過內建連線 (API) 或連接器連線至 BigQuery 的資訊主頁效能。
  • 您有經常查詢的資料表: BI Engine 可讓您指定偏好資料表來加快速度。如果您有經常查詢或用於高曝光度資訊主頁的資料表子集,這項功能就相當實用。

在下列情況下,BI Engine 可能不符合您的需求:

  • 查詢中使用萬用字元:BI Engine 不支援參照萬用字元資料表的查詢,因此無法加速這類查詢。
  • 您需要使用 BI Engine 不支援的 BigQuery 功能: 雖然 BI Engine 支援大多數的 SQL 函式和運算子, 但BI Engine 不支援的功能 包括外部資料表、資料列層級安全性,以及非 SQL 使用者定義函式。

使用 BI Engine 時的注意事項

決定如何設定 BI Engine 時,請考量下列事項:

確保特定查詢的加速功能

如要確保一組查詢獲得加速,請建立獨立專案,並使用專屬的 BI Engine 預留項目。首先,請估算查詢所需的運算容量,然後將這些資料表指定為 BI Engine 的偏好資料表

盡量減少聯結

BI Engine 最適合用於預先聯結或預先匯總的資料,以及聯結次數較少的查詢。如果聯結的一側很大,另一側很小,例如查詢大型事實資料表並聯結較小的維度資料表時,這種情況尤其明顯。您可以將 BI Engine 與具體化檢視區塊結合,執行聯結作業,產生單一大型無格式資料表。這樣一來,系統就不會針對每項查詢執行相同的聯結。建議使用過時的具體化檢視表,以獲得最佳查詢效能。

瞭解 BI Engine 的影響

如要瞭解 BI Engine 的使用情形,請參閱「透過 Cloud Monitoring 監控 BI Engine」一文,或查詢 INFORMATION_SCHEMA.BI_CAPACITIESINFORMATION_SCHEMA.BI_CAPACITY_CHANGES 檢視畫面。請務必在 BigQuery 中停用「使用快取的結果」選項,以取得最準確的比較結果。詳情請參閱「使用快取的查詢結果」一節。

偏好的資料表

BI Engine 偏好資料表可讓您將 BI Engine 加速功能限制在特定資料表。查詢所有其他資料表時,會使用一般 BigQuery 運算單元。舉例來說,您可以只加速處理對業務而言重要的表格和資訊主頁。

如果專案的 RAM 不足以容納所有偏好的資料表,BI Engine 會卸載最近未存取的分區和資料欄。這個程序會釋放記憶體,供需要加速的新查詢使用。

偏好資料表限制

BI Engine 偏好資料表有下列限制:

  • 您無法將檢視畫面新增至偏好資料表預訂清單。 BI Engine 偏好資料表僅支援資料表。
  • 只有在具體化檢視表和基礎資料表都位於偏好資料表清單中時,系統才會加速處理具體化檢視表的查詢。
  • 系統不支援指定要加速的分區或資料欄。
  • BI Engine 不支援 JSON 類型的資料欄,因此不會加速處理。
  • 只有在存取多個資料表的查詢中,所有資料表都是偏好資料表時,查詢才會加速。舉例來說,查詢中含有 JOIN 的所有資料表都必須位於偏好資料表清單中,才能加速查詢。如果連一個資料表都不在偏好清單中,查詢就無法使用 BI Engine。
  • Google Cloud 控制台不支援公開資料集。如要將公開資料表新增為偏好資料表,請使用 API 或 DDL。

限制

如要使用 BI Engine,貴機構必須建立 BI Engine 預留項目,並搭配支援的版本,才能購買 BI Engine 容量。詳情請參閱瞭解 BigQuery 版本

此外,BigQuery BI Engine 還有下列限制。

彙整

BI Engine 可加快特定類型的聯結查詢。加速作業會在葉層級子查詢中進行,並使用 INNERLEFT OUTER JOINS,其中大型事實資料表會與最多四個較小的「維度」資料表聯結。小型維度資料表有下列限制:

  • 少於 500 萬列
  • 大小限制:
    • 未分區資料表:5 GiB 以下
    • 分區資料表:參照的分區大小為 1 GB 以下

窗型函式

窗型函式 (又稱分析函式) 在 BigQuery BI Engine 加速時,有下列限制:

  • 如果輸入階段沒有視窗函式,BigQuery BI Engine 就會加速處理。在此情況下,INFORMATION_SCHEMA.JOBS 檢視報表 bi_engine_statistics。以FULL_INPUT呈現的acceleration_mode
  • 輸入階段中含有窗型函式的查詢,其輸入階段會由 BI Engine 加速,但不會受到「BI Engine 窗型函式限制」一節所述的限制。在這種情況下,輸入階段或完整查詢會在 BI Engine 中執行。在此情況下,INFORMATION_SCHEMA.JOBS 檢視報表 bi_engine_statistics。以 FULL_INPUTFULL_QUERY 格式指定的 acceleration_mode

如要進一步瞭解 BiEngineStatistics 欄位,請參閱工作參考資料

BI Engine 窗型函式限制

只有在符合下列所有條件時,含有視窗函式的查詢才會在 BI Engine 中執行:

  • 查詢只會掃描一個資料表。
    • 資料表未分區。
    • 表格列數少於 500 萬列。
  • 查詢沒有 JOIN 運算子。
  • 掃描的資料表大小乘以視窗函式運算子數量,不得超過 300 MiB。

如果兩個視窗函式具有相同的 OVER 子句和直接輸入內容,則可共用相同的視窗函式運算子。例如:

  • SELECT ROW_NUMBER() OVER (ORDER BY x), SUM(x) OVER (ORDER BY x) FROM my_table 只有一個視窗函式運算子。
  • SELECT ROW_NUMBER() OVER (ORDER BY x), SUM(x) OVER (PARTITION BY y ORDER BY x) FROM my_table 有兩個視窗函式運算子,因為這兩個函式有不同的 OVER 子句。
  • SELECT ROW_NUMBER() OVER (ORDER BY x) FROM (SELECT SUM(x) OVER (ORDER BY x) AS x FROM my_table) 有兩個視窗函式運算子,因為這兩個函式有不同的直接輸入內容,但 OVER 子句看起來相同。

支援的視窗函式

系統支援下列參照的視窗函式:

  • ANY_VALUE
  • AVG
  • BIT_AND
  • BIT_OR
  • BIT_XOR
  • CORR
  • COUNT
  • COUNTIF
  • COVAR_POP
  • COVAR_SAMP
  • CUME_DIST
  • DENSE_RANK
  • FIRST_VALUE
  • LAG
  • LAST_VALUE
  • LEAD
  • LOGICAL_AND
  • LOGICAL_OR
  • MAX
  • MIN
  • NTH_VALUE
  • NTILE
  • PERCENT_RANK
  • PERCENTILE_CONT
  • PERCENTILE_DISC
  • RANK
  • ROW_NUMBER
  • ST_CLUSTERDBSCAN
  • STDDEV_POP
  • STDDEV_SAMP
  • STDDEV
  • STRING_AGG
  • SUM
  • VAR_POP
  • VAR_SAMP
  • VARIANCE

如果系統不支援視窗函式,您可能會看到下列錯誤訊息:

分析函式與其他運算子不相容,或輸入內容過大

其他 BI Engine 限制

下列功能不支援 BI Engine 加速:

  • JavaScript UDF
  • 外部資料表,包括 BigLake 資料表
  • 查詢 JSON 資料 - 錯誤訊息:不支援 JSON 原生型別
  • 將結果寫入永久 BigQuery 資料表
  • 包含使用 BigQuery 變更資料擷取的 upsert 的資料表
  • 交易
  • 傳回超過 1 GiB 資料的查詢。對於延遲時間敏感的應用程式,建議回應大小小於 1 MiB。
  • 資料列層級安全性
  • 使用 SEARCH 函式的查詢 或透過搜尋索引最佳化的查詢

不支援功能的替代方案

雖然 BigQuery BI Engine 不支援部分 SQL 功能,但您可以使用下列解決方法:

  1. 在 BigQuery 中編寫查詢。
  2. 將查詢結果儲存至資料表。
  3. 排定查詢時間,定期更新資料表。建議以每小時或每天一次的頻率更新。 每分鐘重新整理一次可能會導致快取過於頻繁地失效。
  4. 在效能關鍵查詢中參照這個資料表。

配額與限制

如要瞭解 BI Engine 適用的配額與限制,請參閱 BigQuery 配額與限制

定價

您必須支付為 BI Engine 容量建立預留項目時產生的費用。如要瞭解 BI Engine 的計價方式,請參閱 BigQuery 定價頁面。

後續步驟