类别:

聚合函数 (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_COMBINEDATASKETCHES_HLL_ESTIMATE

语法

DATASKETCHES_HLL_ACCUMULATE( [ DISTINCT ] <expr> [ , <max_log_k> ] )
Copy

必填实参

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);
      
      Copy
      SELECT DATASKETCHES_HLL_ACCUMULATE(TO_BINARY(HEX_ENCODE(1), 'HEX'));
      
      Copy
    • :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;
Copy

使用 DATASKETCHES_HLL_ACCUMULATE 函数为列 v 中的数据创建两个二进制草图,在列 g 中按值 12 分组:

SELECT g,
       DATASKETCHES_HLL_ACCUMULATE(v) AS accumulated_sketches
  FROM datasketches_demo
  GROUP BY g;
Copy
+---+------------------------------------------+
| G | ACCUMULATED_SKETCHES                     |
|---+------------------------------------------|
| 1 | 0201070C030802002BF2FB06862FF90D         |
| 2 | 0201070C030803002BF2FB0681BC5D067B65E608 |
+---+------------------------------------------+
语言: 中文