allow_approximate_optimization

用量

view: view_name {
  measure: field_name {
    allow_approximate_optimization: yes 
  }
}
階層
allow_approximate_optimization
可能的欄位類型
度量

預設值
no

接受
布林值 (是或否)

定義

如果方言支援 HyperLogLog 草圖,Looker 就能運用 HyperLogLog 演算法,估算匯總表格的不重複計數。

allow_approximate_optimization: yes 陳述式可讓 Looker 將 HyperLogLog 草圖儲存在匯總表格中,這表示 Looker 可以使用近似值來計算匯總感知的不重複計數。

如要瞭解哪些方言支援使用 HyperLogLog 草圖,對匯總表格進行不重複計數,請參閱本頁的「支援匯總感知不重複計數的方言」一節。

一般來說,匯總感知功能不支援不重複計數,因為嘗試匯總不重複計數時,無法取得準確的資料。舉例來說,如果您要計算網站的不重複使用者人數,可能會有一位使用者在三週內造訪網站兩次。如果您嘗試套用每週匯總表格,取得網站每月不重複使用者人數,該使用者就會在每月不重複計數查詢中重複計算,導致資料不正確。

解決方法之一是建立與探索查詢完全相符的匯總表格,詳情請參閱「匯總感知」說明文件頁面。如果「探索」查詢和匯總表格查詢相同,不重複計數測量指標確實會提供準確的資料,因此可用於匯總感知。

另一個選項是使用不重複計數的近似值。HyperLogLog 演算法可能會有約 2% 的誤差。allow_approximate_optimization 參數需要 Looker 開發人員確認,測量指標可以使用近似資料,這樣才能從匯總表格中計算出近似值。

使用匯總感知功能時,不重複計數會在以下兩種情況發揮作用:

  • 第一種情況是使用 type: count_distinct 測量指標。
  • 第二種情況是,Looker 實際將 type: count 測量指標轉譯為 count_distinct 測量指標類型。如匯總感知說明文件頁面所述,Looker 會將 count 測量指標算為 count_distinct,避免在彙整多個資料庫資料表的探索中,發生扇出錯誤計算。

在這兩種情況下,如果您的方言支援 HyperLogLog 草圖,您可以在測量指標中加入 allow_approximate_optimization: yes 陳述式,啟用近似值。接著,您可以在匯總表格中加入這些測量指標。

即使是使用 allow_approximate_optimization: yes 定義的測量指標,Looker 也會盡可能傳回確切資料。舉例來說,如果探索查詢中的維度與匯總表格中的維度完全相符,Looker 就能提供不重複計數的確切資料,不必使用近似值。在這種情況下,您會在「探索」的「SQL」分頁中看到,系統使用不重複計數測量指標來匯總感知,而不採用 HyperLogLog 演算法。

範例

本例中的 apx_unique_count 測量指標設為 allow_approximate_optimization: yes,表示該指標可用於 aggregate_table。

measure: apx_unique_count {
  type: count_distinct
    allow_approximate_optimization: yes   # default value is no
  sql: ${id} ;;
}

支援匯總感知不重複計數的方言

Looker 可使用不重複計數,透過支援 HyperLogLog 草圖的資料庫方言匯總感知。在最新版 Looker 中,下列 SQL 方言支援使用匯總感知功能計算不重複值:

方言 是否支援?
Actian Avalanche
Amazon Athena
Amazon Aurora MySQL
Amazon Redshift
Amazon Redshift 2.1+
Amazon Redshift Serverless 2.1+
Apache Druid
Apache Druid 0.13.x - 0.17.x
Apache Druid 0.18+
Apache Hive 2.3+
Apache Hive 3.1.2+
Apache Spark 3+
ClickHouse
ClickHouse 26+
Cloudera Impala 3.1+
Cloudera Impala 3.1+ with Native Driver
Cloudera Impala with Native Driver
DataVirtuality
Databricks
Denodo 7
Denodo 8 & 9
Dremio
Dremio 11+
Dremio 26+ with Arrow Flight SQL
Exasol
Google BigQuery Legacy SQL
Google BigQuery Standard SQL
Google Cloud AlloyDB for PostgreSQL
Google Cloud PostgreSQL
Google Cloud SQL
Google Spanner
Greenplum
HyperSQL
IBM Netezza
MariaDB
Microsoft Azure PostgreSQL
Microsoft Azure SQL Database
Microsoft Azure Synapse Analytics
Microsoft SQL Server 2008+
Microsoft SQL Server 2012+
Microsoft SQL Server 2016
Microsoft SQL Server 2017+
MongoBI
MongoSQL
MySQL
MySQL 8.0.12+
Oracle
Oracle ADWC
PostgreSQL 9.5+
PostgreSQL pre-9.5
PrestoDB
PrestoSQL
SAP HANA
SAP HANA 2+
SingleStore
SingleStore 7+
Snowflake
Teradata
Trino
Vector
Vertica

請參閱 SQL 方言說明文件,瞭解這個方法在速度和準確度之間的取捨。