
# 日志函数
hll主要存在三种模式Explicit、Sparse和Full。当数据规模比较小的时候会使用Explicit模式，这种模式下distinct值的计算是没有误差的；随着distinct值越来越多，hll会先后转换为Sparse模式和Full模式，这两种模式在计算结果上没有任何区别，只影响hll函数的计算效率和hll对象的存储空间。下面的函数可以用于查看hll的一些参数。
#### hll_print(hll)
描述：打印hll的一些debug参数信息。
示例：
```
gaussdb=# SELECT hll_print(hll_empty());
                                   hll_print
-------------------------------------------------------------------------------
 type=1(HLL_EMPTY), log2m=14, log2explicit=10, log2sparse=12, duplicatecheck=0
(1 row)
```
#### hll_type(hll)
描述：查看当前hll的类型。返回值具体含义如下：返回值0，表示HLL_UNINIT，未初始化的hll对象；返回值1，表示HLL_EMPTY，hll空对象；返回值2，表示HLL_EXPLICIT，Explicit模式的hll对象；返回值3，表示HLL_SPARSE，Sparse模式的hll对象；返回值4，表示HLL_FULL，Full模式的hll对象；返回值5，表示HLL_UNDEFINED，不合法的hll对象。
示例：
```
gaussdb=# SELECT hll_type(hll_empty());
 hll_type 
----------
        1
(1 row)
```
#### hll_log2m(hll)
描述：查看当前hll数据结构中的log2m数值，log2m是分桶数的对数值，此值会影响最后hll计算distinct误差率，误差率计算公式为±1.04/√(2 \^ log2m)。当显式指定log2m的取值为10-16之间时，hll会设置分桶数为2^log2m^。当显式指定log2explicit为-1时，会采用内置默认值。
示例：
```
gaussdb=# SELECT hll_log2m(hll_empty());
 hll_log2m
-----------
        14
(1 row)
gaussdb=# SELECT hll_log2m(hll_empty(10));
 hll_log2m
-----------
        10
(1 row)
gaussdb=# SELECT hll_log2m(hll_empty(-1));
 hll_log2m
-----------
        14
(1 row)
```
#### hll_log2explicit(hll)
描述：查看当前hll数据结构中的log2explicit数值。hll通常会由Explicit模式到Sparse模式再到Full模式，这个过程称为promotion hierarchy策略。可以通过调整log2explicit值的大小改变策略，比如log2explicit为0的时候就会跳过Explicit模式而直接进入Sparse模式。当显式指定log2explicit的取值为1-12之间时，hll会在数据段长度超过2^log2explicit^时转为Sparse模式。当显式指定log2explicit为-1时，会采用内置默认值。
示例：
```
gaussdb=# SELECT hll_log2explicit(hll_empty());
 hll_log2explicit
------------------
               10
(1 row)
gaussdb=# SELECT hll_log2explicit(hll_empty(12, 8));
 hll_log2explicit
------------------
                8
(1 row)
gaussdb=# SELECT hll_log2explicit(hll_empty(12, -1));
 hll_log2explicit
------------------
               10
(1 row)
```
#### hll_log2sparse(hll)
描述：查看当前hll数据结构中的log2sparse数值。hll通常会由Explicit模式到Sparse模式再到Full模式，这个过程称为promotion hierarchy策略。可以通过调整log2sparse值的大小改变策略，比如log2sparse为0的时候就会跳过Sparse模式而直接进入Full模式。当显式指定Sparse的取值为1-14之间时，hll会在数据段长度超过2^log2sparse^时转为Full模式。当显式指定log2sparse为-1时，会采用内置默认值。
示例：
```
gaussdb=# SELECT hll_log2sparse(hll_empty());
 hll_log2sparse
----------------
             12
(1 row)
gaussdb=# SELECT hll_log2sparse(hll_empty(12, 8, 10));
 hll_log2sparse
----------------
             10
(1 row)
gaussdb=# SELECT hll_log2sparse(hll_empty(12, 8, -1));
 hll_log2sparse
----------------
             12
(1 row)
```
#### hll_duplicatecheck(hll)
描述：是否启用duplicatecheck，0是关闭，1是开启。默认关闭，对于有较多重复值出现的情况，可以开启以提高效率。当显式指定duplicatecheck为-1时，会采用内置默认值。
示例：
```
gaussdb=# SELECT hll_duplicatecheck(hll_empty());
 hll_duplicatecheck
--------------------
                  0
(1 row)
gaussdb=# SELECT hll_duplicatecheck(hll_empty(12, 8, 10, 1));
 hll_duplicatecheck
--------------------
                  1
(1 row)
gaussdb=# SELECT hll_duplicatecheck(hll_empty(12, 8, 10, -1));
 hll_duplicatecheck
--------------------
                  0
(1 row)
```
