聚合函数
hll_add_agg(hll_hashval)
描述:把哈希后的数据按照分组放到hll中。
返回值类型:hll
示例:
- 准备数据。
1 2 3 4
CREATE TABLE t_id(id int); INSERT INTO t_id VALUES(generate_series(1,500)); CREATE TABLE t_data(a int, c text); INSERT INTO t_data SELECT mod(id,2), id FROM t_id;
- 创建表并指定列为hll。
1
CREATE TABLE t_a_c_hll(a int, c hll);
- 根据a列group by对数据分组,把各组数据加到hll中。
1
INSERT INTO t_a_c_hll SELECT a, hll_add_agg(hll_hash_text(c)) FROM t_data GROUP BY a;
- 得到每组数据中hll的Distinct值。
1 2 3 4 5 6
SELECT a, #c as cardinality FROM t_a_c_hll order by a; a | cardinality ---+------------------ 0 | 250.741759091658 1 | 250.741759091658 (2 rows)
hll_add_agg(hll_hashval, int32 log2m)
描述:把哈希后的数据按照分组放到hll中。并指定参数log2m,取值范围为10~16。
返回值类型:hll
示例:
1 2 3 4 5 |
SELECT hll_cardinality(hll_add_agg(hll_hash_text(c), 10)) FROM t_data; hll_cardinality ------------------ 503.932348927339 (1 row) |
hll_add_agg(hll_hashval, int32 log2m, int32 regwidth)
描述:把哈希后的数据按照分组放到hll中。依次指定参数log2m,regwidth。 regwidth取值范围为1~5。
返回值类型:hll
示例:
1 2 3 4 5 |
SELECT hll_cardinality(hll_add_agg(hll_hash_text(c), NULL, 1)) FROM t_data; hll_cardinality ------------------ 496.628982624022 (1 row) |
hll_add_agg(hll_hashval, int32 log2m, int32 regwidth, int64 expthresh)
描述:把哈希后的数据按照分组放到hll中,依次指定参数log2m、regwidth、expthresh。expthresh的取值范围是-1~7之间的整数,该参数可以用来设置从Explicit模式到Sparse模式的阈值大小。-1表示自动模式,0表示跳过Explicit模式,取1~7表示在基数到达 2expthresh时切换模式。
返回值类型:hll
示例:
1 2 3 4 5 |
SELECT hll_cardinality(hll_add_agg(hll_hash_text(c), NULL, 1, 4)) FROM t_data; hll_cardinality ------------------ 496.628982624022 (1 row) |
hll_add_agg(hll_hashval, int32 log2m, int32 regwidth, int64 expthresh, int32 sparseon)
描述:把哈希后的数据按照分组放到hll中,依次指定参数log2m、regwidth、expthresh、sparseon。sparseon取值范围为0或者1。
返回值类型:hll
示例:
1 2 3 4 5 |
SELECT hll_cardinality(hll_add_agg(hll_hash_text(c), NULL, 1, 4, 0)) FROM t_data; hll_cardinality ------------------ 496.628982624022 (1 row) |
hll_union_agg(hll)
描述:将多个hll类型数据union成一个hll。
返回值类型:hll
示例:
将各组中的hll数据union成一个hll,并计算distinct值。
1 2 3 4 5 |
SELECT #hll_union_agg(c) as cardinality FROM t_a_c_hll; cardinality ------------------ 496.628982624022 (1 row) |
当两个或者多个hll数据结构执行union时,必须要保证其中每一个hll里面的精度参数一样,否则不能进行union。同样的约束也适用于函数hll_union(hll,hll)。