APPROX_COUNT_DISTINCT¶
使用 HyperLogLog 返回输入的非重复基数的近似值(即 HLL(col1, col2, ... )
返回 COUNT(DISTINCT col1, col2, ... )
的近似值)。
有关 HyperLogLog 的更多信息,请参阅 估计非重复值的数量。
- 别名:
HLL。
- 另请参阅:
语法¶
聚合函数
APPROX_COUNT_DISTINCT( [ DISTINCT ] <expr1> [ , ... ] )
APPROX_COUNT_DISTINCT(*)
窗口函数
APPROX_COUNT_DISTINCT( [ DISTINCT ] <expr1> [ , ... ] ) OVER ( [ PARTITION BY <expr2> ] )
APPROX_COUNT_DISTINCT(*) OVER ( [ PARTITION BY <expr2> ] )
实参¶
expr1
这是用于了解非重复值数的表达式。
expr2
这是可选表达式,用于将行分组到分区。
*
返回记录总数的近似值,不包括带 NULL 值的记录。
当您将通配符传递给函数时,您可以使用表的名称或别名来限定通配符。例如,要传入名为
mytable
的表中的所有列,请指定以下内容:(mytable.*)
您还可以使用 ILIKE 和 EXCLUDE 关键字进行筛选:
ILIKE 筛选条件,用于查找与指定模式匹配的列名。只允许使用一种模式。例如:
(* ILIKE 'col1%')
EXCLUDE 筛选出与指定列或列不匹配的列名。例如:
(* EXCLUDE col1) (* EXCLUDE (col1, col2))
使用这些关键字时,限定符有效。以下示例使用 ILIKE 关键字筛选出与表
mytable
中的模式col1%
相匹配的所有列:(mytable.* ILIKE 'col1%')
ILIKE 和 EXCLUDE 关键字不能组合在单个函数调用中。
对于此函数,ILIKE 和 EXCLUDE 关键字仅在 SELECT 列表或 GROUP BY 子句中有效。
关于 ILIKE 和 EXCLUDE 关键字的更多信息,请参阅 SELECT 中的“参数”部分。
返回¶
返回值的数据类型是 INTEGER。
使用说明¶
虽然计算是近似值,但它是确定性的。当使用相同的输入数据调用此函数时,此函数返回相同的结果。
有关 NULL 值和聚合函数的信息,请参阅 聚合函数和 NULL 值。
当此函数作为窗口函数调用时,它不支持:
OVER 子句中的 ORDER BY 子句。
显式窗口框架。
示例¶
此示例展示如何使用 APPROX_COUNT_DISTINCT 及其别名 HLL。此示例同时调用 COUNT(DISTINCT i)
和 APPROX_COUNT_DISTINCT(i)
函数,强调这两个函数的结果并不总是完全匹配。
以下查询的确切输出可能会有所不同,因为 APPROX_COUNT_DISTINCT 返回的是近似值,而不是确切值。
SELECT COUNT(i), COUNT(DISTINCT i), APPROX_COUNT_DISTINCT(i), HLL(i)
FROM sequence_demo;
+----------+-------------------+--------------------------+--------+
| COUNT(I) | COUNT(DISTINCT I) | APPROX_COUNT_DISTINCT(I) | HLL(I) |
|----------+-------------------+--------------------------+--------|
| 1024 | 1024 | 1007 | 1007 |
+----------+-------------------+--------------------------+--------+