allow_approximate_optimization

用法

view: view_name {
  measure: field_name {
    allow_approximate_optimization: yes 
  }
}
层次结构
allow_approximate_optimization
可能的字段类型
测量

默认值
no

接受
布尔值(yes 或 no)

定义

对于支持 HyperLogLog 草图的方言,Looker 可以利用 HyperLogLog 算法来估算汇总表格的非重复计数。

借助 allow_approximate_optimization: yes 语句,Looker 可以在汇总表格中存储 HyperLogLog 草图,这意味着 Looker 可以使用近似值来计算汇总感知的不同计数。

如需查看支持使用 HyperLogLog 草图对汇总表格进行非重复计数统计的方言列表,请参阅本页面上的支持使用汇总感知功能进行非重复计数统计的方言部分。

一般来说,聚合感知不支持非重复计数,因为如果您尝试聚合非重复计数,则无法获得准确的数据。例如,如果您要统计某个网站上的不同用户数,可能会有用户在相隔三周的时间内两次访问该网站。如果您尝试应用每周汇总表格来获取网站上每月不重复用户数,那么该用户在每月不重复用户数查询中会被统计两次,数据就会不正确。

一种解决方法是创建一个与探索查询完全匹配的汇总表格,如汇总感知文档页面中所述。当探索查询和汇总表格查询相同时,非重复计数度量确实会提供准确的数据,因此可用于汇总感知。

另一种方法是使用近似值来计算非重复计数。众所周知,HyperLogLog 算法存在大约 2% 的潜在误差。allow_approximate_optimization 参数要求 Looker 开发者确认可以对度量使用近似数据,以便从汇总表格中近似计算度量。

在聚合感知中,有两种情况会用到非重复计数:

  • 第一种情况是使用 type: count_distinct 的测量。
  • 第二种情况是,type: count 的测量值实际上由 Looker 呈现为 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 方言的文档,了解此方法在速度和准确性方面的权衡。