云数据库 GAUSSDB-HLL函数和操作符:聚合函数

时间:2024-11-02 18:50:29

聚合函数

  • hll_add_agg(hll_hashval)

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

    返回值类型:hll

    示例:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    --准备数据
    gaussdb=# CREATE TABLE t_id(id int);
    gaussdb=# INSERT INTO t_id VALUES(generate_series(1,500));
    gaussdb=# CREATE TABLE t_data(a int, c text);
    gaussdb=# INSERT INTO t_data SELECT mod(id,2), id FROM t_id;
    
    --创建表并指定列为hll
    gaussdb=# CREATE TABLE t_a_c_hll(a int, c hll);
    
    --根据a列GROUP BY对数据分组,把各组数据加到hll中
    gaussdb=# INSERT INTO t_a_c_hll SELECT a, hll_add_agg(hll_hash_text(c)) FROM t_data GROUP BY a;
    
    --得到每组数据中hll的Distinct值
    gaussdb=# SELECT a, #c AS cardinality FROM t_a_c_hll ORDER BY a;
     a |   cardinality    
    ---+------------------
     0 | 247.862354346299
     1 | 250.908710610377
    (2 rows)
    
  • hll_add_agg(hll_hashval, int32 log2m)

    描述:把哈希后的数据按照分组放到hll中, 并指定参数log2m,取值范围是10到16。若输入-1或者NULL,则采用内置默认值。

    返回值类型:hll

    示例:

    1
    2
    3
    4
    5
    gaussdb=# SELECT hll_cardinality(hll_add_agg(hll_hash_text(c), 12)) FROM t_data;
     hll_cardinality  
    ------------------
     497.965240179228
    (1 row)
    
  • hll_add_agg(hll_hashval, int32 log2m, int32 log2explicit)

    描述:把哈希后的数据按照分组放到hll中,依次指定参数log2m、log2explicit。 log2explicit取值范围是0到12,0表示直接跳过Explicit模式。该参数可以用来设置Explicit模式的阈值大小,在数据段长度达到2log2explicit后切换为Sparse模式或者Full模式。若输入-1或者NULL,则log2explicit采用内置默认值。

    返回值类型:hll

    示例:

    1
    2
    3
    4
    5
    gaussdb=# SELECT hll_cardinality(hll_add_agg(hll_hash_text(c), NULL, 1)) FROM t_data;
     hll_cardinality  
    ------------------
     498.496062953313
    (1 row)
    
  • hll_add_agg(hll_hashval, int32 log2m, int32 log2explicit, int64 log2sparse)

    描述:把哈希后的数据按照分组放到hll中, 依次指定参数log2m、log2explicit、log2sparse。log2sparse取值范围是0到14,0表示直接跳过Sparse模式。该参数可以用来设置Sparse模式的阈值大小,在数据段长度达到2log2sparse后切换为Full模式。若输入-1或者NULL,则log2sparse采用内置默认值。

    返回值类型:hll

    示例:

    1
    2
    3
    4
    5
    gaussdb=# SELECT hll_cardinality(hll_add_agg(hll_hash_text(c), NULL, 6, 10)) FROM t_data;
     hll_cardinality  
    ------------------
     498.496062953313
    (1 row)
    
  • hll_add_agg(hll_hashval, int32 log2m, int32 log2explicit, int64 log2sparse, int32 duplicatecheck)

    描述:把哈希后的数据按照分组放到hll中, 依次指定参数log2m、log2explicit、log2sparse、duplicatecheck,duplicatecheck取值范围是0或者1,表示是否开启该模式,默认情况下该模式会关闭。若输入-1或者NULL,则duplicatecheck采用内置默认值。

    返回值类型:hll

    示例:

    1
    2
    3
    4
    5
    gaussdb=# SELECT hll_cardinality(hll_add_agg(hll_hash_text(c), NULL, 6, 10, -1)) FROM t_data;
     hll_cardinality  
    ------------------
     498.496062953313
    (1 row)
    
  • hll_union_agg(hll)

    描述:将多个hll类型数据union成一个hll。

    返回值类型:hll

    示例:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    --将各组中的hll数据union成一个hll,并计算distinct值。
    gaussdb=# SELECT #hll_union_agg(c) AS cardinality FROM t_a_c_hll;
       cardinality    
    ------------------
     498.496062953313
    (1 row)
    
    --删除表
    gaussdb=# DROP TABLE t_id;
    gaussdb=# DROP TABLE t_data;
    gaussdb=# DROP TABLE t_a_c_hll;
    

    注意:当两个或者多个hll数据结构做union的时候,必须要保证其中每一个hll里面的精度参数一样,否则将不可以进行union。同样的约束也适用于函数hll_union(hll,hll)。

support.huaweicloud.com/centralized-devg-v3-gaussdb/gaussdb-12-0351.html