类别:

/sql-reference/functions-aggregation`(基数估算)、:doc:/sql-reference/functions-analytic`

APPROX_COUNT_DISTINCT

使用 HyperLogLog 返回输入的非重复基数的近似值(即 HLL(col1, col2, ... ) 返回 COUNT(DISTINCT col1, col2, ... ) 的近似值)。

有关 HyperLogLog 的更多信息,请参阅 估计非重复值的数量

别名:

HLL

另请参阅:

HLL_ACCUMULATEHLL_COMBINEHLL_ESTIMATE

语法

聚合函数

APPROX_COUNT_DISTINCT( [ DISTINCT ] <expr1>  [ , ... ] )

APPROX_COUNT_DISTINCT(*)
Copy

窗口函数

APPROX_COUNT_DISTINCT( [ DISTINCT ] <expr1>  [ , ... ] ) OVER ( [ PARTITION BY <expr2> ] )

APPROX_COUNT_DISTINCT(*) OVER ( [ PARTITION BY <expr2> ] )
Copy

实参

expr1

这是用于了解非重复值数的表达式。

expr2

这是可选表达式,用于将行分组到分区。

返回

返回值的数据类型是 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 |
+----------+-------------------+--------------------------+--------+
Copy
语言: 中文