BI Engine 簡介
BigQuery BI Engine 是速度飛快的記憶體內分析服務,可透過智慧快取您最常用到的資料,加速 BigQuery 中的許多 SQL 查詢。BI Engine 可加快任何來源的 SQL 查詢速度,包括資料視覺化工具所撰寫的查詢,並可管理快取資料表,以便持續進行最佳化。這樣一來,您就能在不進行手動調整或資料分層的情況下,改善查詢效能。您可以叢集和分區資料表,進一步改善 BI Engine 在大型資料表上的效能。
舉例來說,如果資訊主頁只顯示上季的資料,您可以按時間分區資料表,這樣只會將最新的分區載入記憶體。您也可以結合已實作的資料檢視和 BI Engine 的優點。當您使用具象化檢視畫面彙整及扁平化資料,以便為 BI Engine 最佳化結構時,這項功能就特別實用。
BI Engine 具備下列優點:
- BigQuery API 相容性:BI Engine 會直接與 BigQuery API 整合。任何透過 REST 或 JDBC 和 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 主控台、Looker Studio 或 Tableau 等 BI 工具,或是用戶端程式庫、API 或 ODBC 或 JDBC 連接器執行,BI Engine 都能加快 BigQuery 查詢的速度。這麼做可大幅改善透過內建連線 (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_CAPACITIES
和 INFORMATION_SCHEMA.BI_CAPACITY_CHANGES
檢視畫面。請務必停用 BigQuery 中的「Use cached results」選項,以便取得最準確的比較結果。詳情請參閱「使用快取查詢結果」。
偏好資料表
您可以使用 BI Engine 偏好資料表,將 BI Engine 加速功能限制在特定的資料表組上。對所有其他資料表的查詢會使用一般 BigQuery 運算單元。舉例來說,您可以使用偏好表格,只為您認為對業務重要的表格和資訊主頁加速。
如果專案中的 RAM 不足以容納所有偏好資料表,BI Engine 會卸載最近未存取的分割區和資料欄。這個程序會為需要加速的新查詢釋放記憶體。
偏好資料表限制
BI Engine 偏好資料表有下列限制:
- 您無法將檢視畫面新增至偏好資料表保留清單。BI Engine 偏好資料表僅支援資料表。
- 只有在具體化檢視表和其基礎資料表都位於偏好資料表清單中時,系統才會加速對具體化檢視表的查詢。
- 不支援指定用於加速的分區或資料欄。
- 系統不支援
JSON
類型的資料欄,因此 BI Engine 不會加速處理。 - 只有在所有資料表都是偏好資料表的情況下,存取多個資料表的查詢才會加速。舉例來說,含有
JOIN
的查詢中,所有資料表都必須列在優先順序表格清單中,才能加速處理。如果偏好清單中沒有任何資料表,查詢就無法使用 BI Engine。 - Google Cloud 控制台不支援公開資料集。如要將公開資料表新增為偏好資料表,請使用 API 或 DDL。
限制
BigQuery BI Engine 有下列限制。
彙整
BI Engine 可加快某些類型的彙整查詢速度。加速功能會在使用 INNER
和 LEFT 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
。acceleration_mode
為FULL_INPUT
或FULL_QUERY
。
如要進一步瞭解 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 變更資料擷取功能的更新/插入作業的資料表
- 交易
- 傳回超過 1 GB 資料的查詢。對於延遲敏感的應用程式,建議回應大小應小於 1 MiB。
- 資料列層級安全性
- 使用
SEARCH
函式或經由搜尋索引最佳化的查詢
不支援功能的解決方法
雖然 BigQuery BI Engine 不支援某些 SQL 功能,但有可用的解決方法:
- 在 BigQuery 中編寫查詢。
- 將查詢結果儲存至資料表。
- 排定查詢時間,以便定期更新資料表。每小時或每天更新一次的頻率效果最佳。每分鐘重新整理一次可能會過於頻繁地使快取無效。
- 在效能至關重要的查詢中參照這個資料表。
配額與限制
如要瞭解 BI Engine 適用的配額與限制,請參閱「BigQuery 配額與限制」。
定價
您必須支付為 BI Engine 容量建立的預留項目費用。如要瞭解 BI Engine 的定價,請參閱 BigQuery 定價頁面。
後續步驟
- 如要瞭解如何建立 BI Engine 預留項目,請參閱「預留 BI Engine 容量」。
- 如要瞭解如何指定偏好資料表,請參閱「BI Engine 偏好資料表」。
- 如要瞭解 BI Engine 的使用率,請參閱「使用 Cloud Monitoring 監控 BI Engine」一文。
- 瞭解 BI Engine 最佳化函式
- 瞭解如何搭配下列項目使用 BI Engine: