メインコンテンツまでスキップ
に最終更新

DATASKETCHES_HLL_UNION_AGG

バージョン 4.1.2 以降でサポートされています。

説明​

datasketches_hll_union_agg は、シリアライズされた複数の Apache DataSketches HLL(hll_sketch)値を統合し、統合後の推定基数(重複しない値の概算件数 / NDV)を返す集約関数です。

この関数には、DataSketches HLL スケッチをシリアライズしたバイト列を入力する必要があります(DataSketches ライブラリの hll_sketch.serialize_compact() で生成したものなど)。任意の文字列は受け付けません。

別名​

  • ds_hll_estimate
  • datasketches_hll_estimate

構文​

datasketches_hll_union_agg(<sketch>)

パラメータ​

パラメータ説明
<sketch>Apache DataSketches HLL スケッチをシリアライズしたバイト列。サポートされる型: STRING / VARCHAR / VARBINARY。NULL 値は無視されます。空文字列は無効な入力として扱われ、エラーが発生します。

戻り値​

基数の推定値を DOUBLE(Float64)型で返します。
グループ内に有効なデータがない場合(または入力が空の場合)は 0 を返します。
入力バイト列を有効な DataSketches HLL スケッチとしてデシリアライズできない場合(空文字列を含む)は、エラーが発生します(通常、エラーコードは CORRUPTION)。

例​

-- setup
CREATE TABLE test_datasketches_hll_union_agg_tbl (
id INT,
sk STRING
)
DISTRIBUTED BY HASH(id) BUCKETS 1
PROPERTIES ("replication_num" = "1");

-- The sketch bytes are inserted via Base64 decoding.
INSERT INTO test_datasketches_hll_union_agg_tbl VALUES
(1, from_base64('AgEHCAMIBwjL18IEK/L7BoYv+Q11gWYHgbxdBntl5gj8LUIK')),
(2, from_base64('AwEHCAUIAAkKAAAAIjvrBcS1nwfGGWoEyHokBO8t9wc1qTEENkcJB7hWqQxZf9QNnuSbGA==')),
(3, NULL);
-- The function returns DOUBLE, so use ROUND/CAST if you want an integer display.
SELECT CAST(ROUND(datasketches_hll_union_agg(sk)) AS BIGINT)
FROM test_datasketches_hll_union_agg_tbl;
+-------------------------------------------------------+
| CAST(ROUND(datasketches_hll_union_agg(sk)) AS BIGINT) |
+-------------------------------------------------------+
| 17 |
+-------------------------------------------------------+
-- aliases
SELECT
CAST(ROUND(datasketches_hll_union_agg(sk)) AS BIGINT) AS v1,
CAST(ROUND(ds_hll_estimate(sk)) AS BIGINT) AS v2,
CAST(ROUND(datasketches_hll_estimate(sk)) AS BIGINT) AS v3
FROM test_datasketches_hll_union_agg_tbl;
+------+------+------+
| v1 | v2 | v3 |
+------+------+------+
| 17 | 17 | 17 |
+------+------+------+
-- empty input returns 0
SELECT datasketches_hll_union_agg(sk)
FROM test_datasketches_hll_union_agg_tbl
WHERE sk IS NULL;
+--------------------------------+
| datasketches_hll_union_agg(sk) |
+--------------------------------+
| 0 |
+--------------------------------+
-- invalid sketch bytes will throw
SELECT datasketches_hll_union_agg(from_base64('AA=='));
ERROR 1105 (HY000): errCode = 2, detailMessage = (127.0.0.1)[CORRUPTION]HLL sketch data corrupted when add: Attempt to deserialize unknown object type
-- empty string is invalid and will throw
SELECT datasketches_hll_union_agg('');
ERROR 1105 (HY000): errCode = 2, detailMessage = (127.0.0.1)[CORRUPTION]HLL sketch data corrupted when add: empty input.