freq_agg() 和 mcv_agg() 函数
工具包TimescaleDB 工具包函数在 Timescale 社区版中可用。它们自动包含在 Timescale 中,但对于自托管的 TimescaleDB 必须单独安装。点击了解更多。简介
获取集合中最常见的元素及其相对频率。此估算使用 SpaceSaving 算法。
这组函数包含两个聚合函数,允许您以不同方式设置跟踪值的截止值。freq_agg
允许您指定最小频率,而 mcv_agg
允许您指定要保留的目标值数量。
要估计值出现的绝对次数,请使用 count_min_sketch
。
相关超函数组
警告
此函数组包含一些实验性函数。实验性函数在未来的版本中可能会更改或删除。我们不建议在生产环境中使用它们。实验性函数标有实验性标签。
聚合
备选聚合
- mcv_agg
- 将数据聚合到节省空间的聚合中,以进一步计算最频繁的值
访问器
- into_values
- 从节省空间的聚合中获取所有频率估计值的表格
- max_frequency
- 获取节省空间的聚合中给定值的估计频率的最大边界
- min_frequency
- 获取节省空间的聚合中给定值的估计频率的最小边界
- topn
- 从节省空间的聚合中获取前 N 个最常见的值
汇总
- rollup
- 合并多个频率聚合
freq_agg(min_freq DOUBLE PRECISION,value AnyElement) RETURNS SpaceSavingAggregate
将数据聚合到节省空间的聚合对象中,该对象以中间形式存储频率信息。然后,您可以使用此组中的任何访问器来返回估计频率或最常见的元素。
必需参数
名称 | 类型 | 描述 |
---|---|---|
min_freq | DOUBLE PRECISION | 用于跟踪值的频率截止值。频率低于截止值的值不会被存储。 |
value | AnyElement | 要存储频率的列 |
返回值
列 | 类型 | 描述 |
---|---|---|
agg | SpaceSavingAggregate | 一个对象,存储给定表中最常见的元素及其估计频率。您可以将此对象传递给任何访问器函数以获取最终结果。 |
示例
在 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
的不同之处在于,您可以指定要保留的目标值数量,而不是频率截止值。
必需参数
名称 | 类型 | 描述 |
---|---|---|
n | INTEGER | 最频繁值的目标数量 |
value | AnyElement | 要存储频率的列 |
可选参数
名称 | 类型 | 描述 |
---|---|---|
skew | DOUBLE PRECISION | 数据的估计偏度,定义为 zeta 分布的 s 参数。必须大于 1.0 。默认为 1.1 。有关更多信息,请参阅关于 偏度 的章节。 |
返回值
列 | 类型 | 描述 |
---|---|---|
agg | SpaceSavingAggregate | 一个对象,存储给定表中最常见的元素及其估计频率。您可以将此对象传递给任何访问器函数以获取最终结果。 |
示例
在 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)
将节省空间的聚合中的数据作为表格返回。该表格列出了存储的值以及其估计频率的最小和最大边界。
返回值
列 | 类型 | 描述 |
---|---|---|
value | AnyElement | 原始数据集中常见的数值 |
min_freq | DOUBLE PRECISION | min_freq |
max_freq | DOUBLE PRECISION | 估计频率的最大边界 |
max_frequency (agg SpaceSavingAggregate,value AnyElement) RETURNS DOUBLE PRECISION
获取节省空间的聚合中给定值的估计频率的最大边界
返回值
列 | 类型 | 描述 |
---|---|---|
max_frequency | DOUBLE 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
获取节省空间的聚合中给定值的估计频率的最小边界
返回值
列 | 类型 | 描述 |
---|---|---|
min_frequency | DOUBLE PRECISION | 该值的估计频率的最小边界。如果值的频率低于节省空间的聚合的截止阈值,则最小频率可能为 0。有关更多信息,请参阅 freq_agg 。 |
示例
在名为 value_test
的表中的名为 value
的列中查找值 3
的最小频率
SELECT min_frequency((SELECT mcv_agg(20, value) FROM value_test),3);
rollup(agg SpaceSavingAggregate) RETURNS SpaceSavingAggregate
这将合并使用 freq_agg
或 mcv_agg
函数创建的多个聚合。此函数确实要求源聚合已使用相同的参数创建(对于 freq_agg
,min_freq
相同;对于 mcv_agg
,n 因子和 skew
相同(如果使用))。
这将产生与在所有源数据上运行相同聚合函数非常相似的聚合。在大多数情况下,任何差异都将不超过您仅重新排序输入可能获得的差异。但是,如果不同聚合的源数据分布非常不同,则汇总结果可能具有较宽松的频率边界。
必需参数
名称 | 类型 | 描述 |
---|---|---|
agg | SpaceSavingAggregate | 要汇总的聚合。这些聚合必须使用相同的参数创建。 |
返回值
列 | 类型 | 描述 |
---|---|---|
rollup | SpaceSavingAggregate | 一个聚合,包含来自所有聚合的所有底层数据中最常见的元素。 |
此测试使用随机生成的数据表。使用的值是范围 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------1918171615
此测试使用随机生成的数据表。使用的值是范围 (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_freqFROM into_values((SELECT toolkit_experimental.freq_agg(0.05, value) FROM value_test));
此查询的输出如下所示,由于随机性,可能会有一些变化
value | min_freq | max_freq-------+----------+----------19 | 0.09815 | 0.0981518 | 0.09169 | 0.0916917 | 0.08804 | 0.0880416 | 0.08248 | 0.0824815 | 0.07703 | 0.0770314 | 0.07157 | 0.0715713 | 0.06746 | 0.0674612 | 0.06378 | 0.0637811 | 0.05565 | 0.0559510 | 0.05286 | 0.05289
您可以调整以下高级选项以适应您的数据分布
mcv_agg
假设数据是倾斜的。换句话说,某些值比其他值更频繁。倾斜程度由 zeta 分布 的 s
参数定义。
默认值 1.1
适用于具有此分布或更极端分布的数据
N | 前 N 个(近似)值表示的所有值的最小百分比 |
---|---|
5 | 20% |
10 | 25% |
20 | 30% |
50 | 36% |
100 | 40% |
关键词
在此页面上发现问题?报告问题 或 在 GitHub 上编辑此页。