类别:

聚合函数 (基数估算)、窗口函数

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

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

*

返回记录总数的近似值,不包括带 NULL 值的记录。

当您将通配符传递给函数时,您可以使用表的名称或别名来限定通配符。例如,要传入名为 mytable 的表中的所有列,请指定以下内容:

(mytable.*)
Copy

您还可以使用 ILIKE 和 EXCLUDE 关键字进行筛选:

  • ILIKE 筛选条件,用于查找与指定模式匹配的列名。只允许使用一种模式。例如:

    (* ILIKE 'col1%')
    
    Copy
  • EXCLUDE 筛选出与指定列或列不匹配的列名。例如:

    (* EXCLUDE col1)
    
    (* EXCLUDE (col1, col2))
    
    Copy

使用这些关键字时,限定符有效。以下示例使用 ILIKE 关键字筛选出与表 mytable 中的模式 col1% 相匹配的所有列:

(mytable.* ILIKE 'col1%')
Copy

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;
Copy
+----------+-------------------+--------------------------+--------+
| COUNT(I) | COUNT(DISTINCT I) | APPROX_COUNT_DISTINCT(I) | HLL(I) |
|----------+-------------------+--------------------------+--------|
|     1024 |              1024 |                     1007 |   1007 |
+----------+-------------------+--------------------------+--------+
语言: 中文