更新时间:2024-10-25 GMT+08:00

聚合函数

hll_add_agg(hll_hashval)

描述:把哈希后的数据按照分组放到hll中。

返回值类型:hll

示例:

  1. 准备数据。
    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;
    
  2. 创建表并指定列为hll。
    1
    CREATE TABLE t_a_c_hll(a int, c hll);
    
  3. 根据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;
    
  4. 得到每组数据中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)。