- 类别:
聚合函数 (Cardinality Estimation) , 窗口函数的语法和用法
DATASKETCHES_HLL_ACCUMULATE¶
在聚合结束时返回草图。
此函数是 HLL HyperLogLog 函数的一个版本,可以读取 Apache DataSketches 使用的格式的二进制草图。有关更多信息,请参阅 Apache DataSketches 文档 (https://datasketches.apache.org/docs/HLL/HllSketches.html)。
DATASKETCHES_HLL 在返回最终基数估计值时放弃其中间状态。在高级用例中,例如批量加载期间的增量基数估计,您可能需要保持中间状态。中间状态稍后可以与其他中间状态组合(合并),也可以导出到外部工具。
与 DATASKETCHES_HLL 相反,DATASKETCHES_HLL_ACCUMULATE 不返回基数估计值。相反,它会跳过最终的估计步骤并返回算法状态本身。有关更多信息,请参阅 估计非重复值的数量。
语法¶
DATASKETCHES_HLL_ACCUMULATE( [ DISTINCT ] <expr> [ , <max_log_k> ] )
必填实参¶
expr
要估计基数(非重复值数)的表达式。这通常是列名,但也可以是更通用的表达式。
可选实参¶
max_log_k
该并集中 K 的最大值,以 log2 表示。指定一个介于 4 和 21(含)之间的 INTEGER 值。有关更多信息,请参阅 Apache DataSketches 文档 (https://datasketches.apache.org/docs/HLL/HllSketches.html)。
默认值:12
返回¶
该函数返回与 Apache Datasketches 库兼容的 BINARY 值。
使用说明¶
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 值。
示例¶
创建表并插入值:
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_ACCUMULATE 函数为列 v
中的数据创建两个二进制草图,在列 g
中按值 1
和 2
分组:
SELECT g,
DATASKETCHES_HLL_ACCUMULATE(v) AS accumulated_sketches
FROM datasketches_demo
GROUP BY g;
+---+------------------------------------------+
| G | ACCUMULATED_SKETCHES |
|---+------------------------------------------|
| 1 | 0201070C030802002BF2FB06862FF90D |
| 2 | 0201070C030803002BF2FB0681BC5D067B65E608 |
+---+------------------------------------------+