简介

获取集合中最常见的元素及其相对频率。估计使用SpaceSaving 算法。

这组函数包含两个聚合函数,您可以通过不同的方式设置用于跟踪值的截止值。freq_agg 允许您指定最小频率,而mcv_agg 允许您指定要保留的值的目标数量。

要估计值出现的绝对次数,请使用count_min_sketch

相关的超函数组
警告

此函数组包含一些实验性函数。实验性函数可能会在将来的版本中更改或删除。我们不建议您在生产环境中使用它们。实验性函数标记为实验性标签。

聚合

freq_agg
实验性将数据聚合到节省空间的聚合对象中,以便进行更深入的频率分析

替代聚合

mcv_agg
将数据聚合到节省空间的聚合对象中,以便进一步计算最频繁的值

访问器

into_values
从节省空间的聚合对象中获取所有频率估计的表
max_frequency
获取节省空间的聚合对象中给定值的估计频率的最大边界
min_frequency
获取节省空间的聚合对象中给定值的估计频率的最小边界
topn
从节省空间的聚合对象中获取前 N 个最常见的值

汇总

rollup
组合多个频率聚合
freq_agg(
min_freq DOUBLE PRECISION,
value AnyElement
) RETURNS SpaceSavingAggregate

将数据聚合到一个节省空间的聚合对象中,该对象以中间形式存储频率信息。然后,您可以使用本组中的任何访问器来返回估计频率或最常见的元素。

必需参数
名称类型描述
min_freqDOUBLE PRECISION用于跟踪值的频率截止值。频率低于截止值的不会存储。
valueAnyElement要存储频率的列
返回值
类型描述
aggSpaceSavingAggregate存储给定表中最常见元素及其估计频率的对象。您可以将此对象传递给任何访问器函数以获取最终结果。
示例

HomeSales 表中的 ZIP 字段上创建一个节省空间的聚合。此聚合跟踪出现在至少 5% 行中的任何 ZIP

SELECT toolkit_experimental.freq_agg(0.05, ZIP) FROM HomeSales;
mcv_agg (
n INTEGER,
value AnyElement
[, skew DOUBLE PRECISION]
) RETURNS SpaceSavingAggregate

将数据聚合到一个节省空间的聚合对象中,该对象以中间形式存储频率信息。然后,您可以使用本组中的任何访问器来返回估计频率或最常见的元素。

这与freq_agg 不同,因为您可以指定要保留的值的目标数量,而不是频率截止值。

必需参数
名称类型描述
nINTEGER目标最频繁值的数量
valueAnyElement要存储频率的列
可选参数
名称类型描述
skewDOUBLE PRECISION数据的估计偏度,定义为 zeta 分布的 s 参数。必须大于 1.0。默认为 1.1。有关更多信息,请参阅关于偏度 的部分。
返回值
类型描述
aggSpaceSavingAggregate存储给定表中最常见元素及其估计频率的对象。您可以将此对象传递给任何访问器函数以获取最终结果。
示例

users 表的 country 列上创建一个 topN 聚合。目标是前 10 个最频繁的值

SELECT mcv_agg(10, country) FROM users;

devices 表的 type 列上创建一个 topN 聚合。估计数据的偏度为 1.05,目标是前 5 个最频繁的值

SELECT mcv_agg(5, 1.05, type) FROM devices;
into_values(
agg SpaceSavingAggregate
) RETURNS (AnyElement, DOUBLE PRECISION, DOUBLE PRECISION)

将节省空间的聚合对象中的数据作为表格返回。该表格列出了存储的值及其估计频率的最小和最大边界。

必需参数
名称类型描述
aggSpaceSavingAggregate使用freq_aggmcv_agg 创建的节省空间的聚合对象
返回值
类型描述
valueAnyElement原始数据集中常见的值
min_freqDOUBLE PRECISION估计频率的最小边界
max_freqDOUBLE PRECISION估计频率的最大边界
max_frequency (
agg SpaceSavingAggregate,
value AnyElement
) RETURNS DOUBLE PRECISION

获取节省空间的聚合对象中给定值的估计频率的最大边界

必需参数
名称类型描述
aggSpaceSavingAggregate使用freq_aggmcv_agg 创建的节省空间的聚合对象
valueAnyElement要获取其频率的值
返回值
类型描述
max_frequencyDOUBLE PRECISION值的估计频率的最大边界。如果值的频率低于节省空间的聚合的截止阈值,则最大频率可能为 0。有关更多信息,请参阅freq_agg
示例

查找 value_test 表中名为 value 的列中值 3 的最大频率

SELECT max_frequency(
(SELECT mcv_agg(20, value) FROM value_test),
3
);
min_frequency (
agg SpaceSavingAggregate,
value AnyElement
) RETURNS DOUBLE PRECISION

获取节省空间的聚合对象中给定值的估计频率的最小边界

必需参数
名称类型描述
aggSpaceSavingAggregate使用freq_aggmcv_agg 创建的节省空间的聚合对象
valueAnyElement要获取其频率的值
返回值
类型描述
min_frequencyDOUBLE PRECISION值的估计频率的最小边界。如果值的频率低于节省空间的聚合的截止阈值,则最小频率可能为 0。有关更多信息,请参阅freq_agg
示例

查找 value_test 表中名为 value 的列中值 3 的最小频率

SELECT min_frequency(
(SELECT mcv_agg(20, value) FROM value_test),
3
);
topn (
agg SpaceSavingAggregate,
n INTEGER
) RETURNS AnyElement

从节省空间的聚合对象中获取前 N 个最常见的值。节省空间的聚合对象可以从freq_aggmcv_agg 创建。

必需参数
名称类型描述
aggSpacingsavingAggregate使用freq_aggmcv_agg 创建的节省空间的聚合对象
nINTEGER要返回的值的数量。仅对频率聚合对象是必需的。对于 top N 聚合对象,默认为聚合对象本身的目标 N,并且对更高 N 的请求会返回错误。在某些情况下,该函数可能返回少于 N 个值。如果频率聚合对象不包含超过最小频率的 N 个值,或者数据的偏度不足以支持 top N 聚合对象中的 N 个值,则可能会发生这种情况。
返回值
类型描述
topnAnyElement聚合对象中最频繁的 N 个值
示例

employees 表中获取前 20 个最频繁的 zip_codes

SELECT topn(mcv_agg(20, zip_code)) FROM employees;
rollup(
agg SpaceSavingAggregate
) RETURNS SpaceSavingAggregate

这将组合使用 freq_aggmcv_agg 函数创建的多个聚合对象。此函数确实要求源聚合对象使用相同的参数创建(对于 freq_agg 使用相同的 min_freq,对于 mcv_agg 使用相同的 n 系数和 skew,如果使用的话)。

这将生成一个与对所有源数据运行相同的聚合函数非常相似的聚合对象。在大多数情况下,任何差异都与简单地重新排序输入可能获得的差异相同。但是,如果不同聚合对象的源数据分布非常不同,则汇总结果可能具有更宽松的频率边界。

必需参数
名称类型描述
aggSpaceSavingAggregate要汇总的聚合对象。这些聚合对象必须使用相同的参数创建。
返回值
类型描述
rollupSpaceSavingAggregate包含所有聚合对象的所有基础数据中最常见元素的聚合对象。

此测试使用随机生成数据的表。使用的值是 0 到 400 范围内随机数的整数平方根。

CREATE TABLE value_test(value INTEGER);
INSERT INTO value_test SELECT floor(sqrt(random() * 400)) FROM generate_series(1,100000);

这将返回表中看到的前 5 个最常见的值

SELECT topn(
toolkit_experimental.freq_agg(0.05, value),
5)
FROM value_test;

此查询的输出

topn
------
19
18
17
16
15

此测试使用随机生成数据的表。使用的值是 (0,400) 范围内随机数的整数平方根。

CREATE TABLE value_test(value INTEGER);
INSERT INTO value_test SELECT floor(sqrt(random() * 400)) FROM generate_series(1,100000);

返回代表超过 5% 输入的值

SELECT value, min_freq, max_freq
FROM into_values(
(SELECT toolkit_experimental.freq_agg(0.05, value) FROM value_test));

此查询的输出如下所示,由于随机性而略有变化

value | min_freq | max_freq
-------+----------+----------
19 | 0.09815 | 0.09815
18 | 0.09169 | 0.09169
17 | 0.08804 | 0.08804
16 | 0.08248 | 0.08248
15 | 0.07703 | 0.07703
14 | 0.07157 | 0.07157
13 | 0.06746 | 0.06746
12 | 0.06378 | 0.06378
11 | 0.05565 | 0.05595
10 | 0.05286 | 0.05289

您可以调整以下高级选项以适应您的数据分布

mcv_agg 假设数据是倾斜的。换句话说,某些值比其他值更频繁。倾斜程度由 zeta 分布s 参数定义。

默认值为 1.1,适用于具有此分布或更极端分布的数据。

N前 N 个值(近似)所代表的所有值的最小百分比。
520%
1025%
2030%
5036%
10040%

关键词

在这个页面上发现问题了吗?报告问题 或者 在 GitHub 上编辑此页面