APPROXIMATE_COUNT_DISTINCT
返回数据集中不同的非 NULL 值数量。
行为类型
不可变语法
APPROXIMATE_COUNT_DISTINCT ( expression[, error-tolerance ] )
参数
- 表达式
- 要使用支持等式比较的任何数据类型评估的值。
- error‑tolerance
表示所需容错百分比的数字值,分布在此函数返回的值周围。容错值越小,近似值越接近实际值。
您可以将
error‑tolerance
设置为最小值 0.88。Vertica 不实施最大值限制,但大于 5 的任何值都以 5% 的容错实现。如果省略此实参,则 Vertica 将使用 1.25(%) 的容错率。
限制
APPROXIMATE_COUNT_DISTINCT 和 DISTINCT 聚合不能在同一查询块中。
容错
APPROXIMATE_COUNT_DISTINCT(x, error‑tolerance)
返回的值等于
COUNT(DISTINCT x)
,而误差以标准差呈对数正态分布。
参数 error‑tolerance 是可选参数。提供此实参以指定所需的标准偏差。error‑tolerance 被定义为 2.17 个标准偏差,对应 97% 的置信区间:
standard-deviation = error‑tolerance / 2.17
例如:
-
error‑tolerance = 1
Default setting, corresponds to a standard deviation
97 percent of the time, APPROXIMATE_COUNT_DISTINCT(x,5) returns a value between:
-
COUNT(DISTINCT x) * 0.99
-
COUNT(DISTINCT x) * 1.01
-
-
error‑tolerance = 5
97% 的时间,
APPROXIMATE_COUNT_DISTINCT(x)
返回介于以下两者之间的值:-
COUNT(DISTINCT x) * 0.95
-
COUNT(DISTINCT x) * 1.05
-
99% 的置信区间对应 2.58
个标准偏差。要将 error-tolerance 设置为对应于 99%(而不是 97) 的置信水平,请将 error-tolerance 乘以 2.17 / 2.58 = 0.841
。
例如,如果您将
error-tolerance
指定为 5 * 0.841 = 4.2
,则
APPROXIMATE_COUNT_DISTINCT(x,4.2)
返回的值是介于以下结果之间的时间的 99%:
-
COUNT (DISTINCT x) * 0.95
-
COUNT (DISTINCT x) * 1.05
示例
计算表 store.store_sales_fact
的 product_key
列中不同值的总数:
=> SELECT COUNT(DISTINCT product_key) FROM store.store_sales_fact;
COUNT
-------
19982
(1 row)
计算具有不同容错值的 product_key
中不同值的近似值。容错值越小,近似值越接近实际值:
=> SELECT APPROXIMATE_COUNT_DISTINCT(product_key,5) AS five_pct_accuracy,
APPROXIMATE_COUNT_DISTINCT(product_key,1) AS one_pct_accuracy,
APPROXIMATE_COUNT_DISTINCT(product_key,.88) AS point_eighteight_pct_accuracy
FROM store.store_sales_fact;
five_pct_accuracy | one_pct_accuracy | point_eighteight_pct_accuracy
-------------------+------------------+-------------------------------
19431 | 19921 | 19921
(1 row)