DATASKETCHES_HLL¶
返回输入的非重复基数的近似值(即 DATASKETCHES_HLL(col1)
返回 COUNT(DISTINCT col1)
的近似值)。
此函数是 HLL HyperLogLog 函数的一个版本,可以读取 Apache DataSketches 使用的格式的二进制草图。有关更多信息,请参阅 Apache DataSketches 文档 (https://datasketches.apache.org/docs/HLL/HllSketches.html)。
语法¶
聚合函数
DATASKETCHES_HLL( [ DISTINCT ] <expr1> [ , <max_log_k> ] )
窗口函数
DATASKETCHES_HLL( [ DISTINCT ] <expr1> [ , <max_log_k> ] )
OVER ( [ PARTITION BY <expr2> ] )
必填实参¶
expr1
用于了解非重复值数量的表达式。
可选实参¶
max_log_k
初始化数据草图 HLL 对象的 K 的最大值,以 log2 表示。指定一个介于 4 和 21(含)之间的 INTEGER 值。有关更多信息,请参阅 Apache DataSketches 文档 (https://datasketches.apache.org/docs/HLL/HllSketches.html)。
默认值:12
expr2
可选表达式,用于将行分组到分区。
返回¶
该函数返回 DOUBLE 类型的值。
如果输入为空,则输出为 0.0
。
使用说明¶
DISTINCT 在语法上受支持,但不起作用。
该函数支持的实参是以下数据类型的值:
:doc:`/sql-reference/data-types-text`(例如 VARCHAR 和 BINARY)。
例如,支持以下函数调用:
SELECT DATASKETCHES_HLL_ACCUMULATE(1::TEXT);
SELECT DATASKETCHES_HLL_ACCUMULATE(TO_BINARY(HEX_ENCODE(1), 'HEX'));
:ref:`label-data_types_for_floating_point_numbers`(例如 FLOAT 和 DOUBLE)
DataSketches 库将这些值的类型强制转换为 DOUBLE 值。
:ref:`label-data_types_for_fixed_point_numbers`(例如 INTEGER 和 NUMERIC)。
该函数仅支持小数位数为 0 的数字类型。但是,您可以将小数位数不为 0 的数值转换为浮点数的数据类型。
DataSketches 库会将 64 位带符号 INTEGER 范围内的这些值转换为 64 位带符号的 INTEGER 值。
DataSketches 库不会直接转换超过 64 位带符号 INTEGER 范围的 INTEGER 值(例如 128 位整数值)。但是,Snowflake 仍然通过自动将这些值转换为 DataSketches 支持的 DOUBLE 值来支持这些值。此行为与
datasketches-python
库的行为相同。
不支持其他数据类型的值。例如,不支持 VARIANT 和 ARRAY 值。
有关 NULL 值和聚合函数的信息,请参阅 聚合函数和 NULL 值。
当此函数作为窗口函数调用时,它不支持:
OVER 子句中的 ORDER BY 子句。
显式窗口框架。
示例¶
创建表并插入值:
CREATE OR REPLACE TABLE datasketches_demo(v INT, g INT);
INSERT INTO datasketches_demo SELECT 1, 1;
INSERT INTO datasketches_demo SELECT 2, 1;
INSERT INTO datasketches_demo SELECT 2, 1;
INSERT INTO datasketches_demo SELECT 2, 1;
INSERT INTO datasketches_demo SELECT 1, 2;
INSERT INTO datasketches_demo SELECT 1, 2;
INSERT INTO datasketches_demo SELECT 4, 2;
INSERT INTO datasketches_demo SELECT 4, 2;
INSERT INTO datasketches_demo SELECT 5, 2;
以下示例使用表中的数据:
返回列中分组数据的预估基数¶
使用 DATASKETCHES_HLL 函数近似计算按列 g
中的值分组的列 v
中数据的不同基数。
SELECT g,
DATASKETCHES_HLL(v),
COUNT(DISTINCT v)
FROM datasketches_demo GROUP BY g;
+---+---------------------+-------------------+
| G | DATASKETCHES_HLL(V) | COUNT(DISTINCT V) |
|---+---------------------+-------------------|
| 1 | 2.000000005 | 2 |
| 2 | 3.000000015 | 3 |
+---+---------------------+-------------------+
输出显示,对于列 g
中的值 1
,列 v
中大约有两个不同的值(即 1
和 2
)。对于列 g
中的值 2
,列 v
中大约有三个不同的值(即 1
、4
和 5
)。COUNT(DISTINCT v))
调用返回的是不同值的确切数量,而非估计值。
如果您使用 DATASKETCHES_HLL_ACCUMULATE 函数根据分组数据创建二进制草图,则 DATASKETCHES_HLL_ESTIMATE 函数会为累积的草图返回相同的结果。有关示例,请参阅 返回累积二进制草图的基数估计值。
返回列中所有数据的预估基数¶
使用 DATASKETCHES_HLL 函数近似计算列 v
中所有数据的不同基数。
SELECT DATASKETCHES_HLL(v),
COUNT(DISTINCT v)
FROM datasketches_demo;
+---------------------+-------------------+
| DATASKETCHES_HLL(V) | COUNT(DISTINCT V) |
|---------------------+-------------------|
| 4.00000003 | 4 |
+---------------------+-------------------+
输出显示,列 v
中大约有四个不同的值(即 1
、2
、4
和 5
)。COUNT(DISTINCT v))
调用返回的是不同值的确切数量,而非估计值。
如果您使用 DATASKETCHES_HLL_ACCUMULATE 函数根据分组的数据创建二进制草图,然后使用 DATASKETCHES_HLL_COMBINE 函数将这些草图组合成一个统一的草图,则 DATASKETCHES_HLL_ESTIMATE 函数将为统一的草图返回相同的结果。有关示例,请参阅 返回组合二进制草图的基数估计值。