DATASKETCHES_HLL¶
入力の異なるカーディナリティの近似値を返します(つまり、 DATASKETCHES_HLL(col1)
は COUNT(DISTINCT col1)
の近似値を返します)。
この関数は、Apache DataSketches で使われている形式のバイナリスケッチを読むことができる HLL HyperLogLog 関数のバージョンです。詳細については、 Apache DataSketches ドキュメント をご参照ください。
構文¶
集計関数
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)。INTEGER の値を4から21の間で指定します。詳細については、 Apache DataSketches ドキュメント をご参照ください。
デフォルト: 12
expr2
行をパーティションにグループ化するためのオプション式。
戻り値¶
この関数は、 DOUBLE 型の値を返します。
入力が空の場合、出力は 0.0
です。
使用上の注意¶
DISTINCT はサポートされていますが、効果はありません。
この関数は、以下のデータ型の引数をサポートしています。
文字列およびバイナリデータ型 (例えば、 VARCHAR や BINARY)。
例えば、以下の関数呼び出しがサポートされています。
SELECT DATASKETCHES_HLL_ACCUMULATE(1::TEXT);
SELECT DATASKETCHES_HLL_ACCUMULATE(TO_BINARY(HEX_ENCODE(1), 'HEX'));
浮動小数点数のデータ型 (例えば、 FLOAT や DOUBLE)
DataSketches ライブラリはこれらの値を DOUBLE の値にキャストします。
固定小数点数のデータ型 (例えば、 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
に約2つの異なる値(つまり、 1
と 2
)があることを示しています。列 g
の値 2
に対して、列 v
には約3つの異なる値があります(つまり、 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
)に約4つの異なる値があることを示しています。 COUNT(DISTINCT v))
を呼び出すと、推定値ではなく異なる値の正確な数値が返されます。
DATASKETCHES_HLL_ACCUMULATE 関数を使用してグループ化されたデータからバイナリスケッチを作成し、 DATASKETCHES_HLL_COMBINE 関数を使用してスケッチを1つの統一されたスケッチに結合すると、 DATASKETCHES_HLL_ESTIMATE 関数は統一されたスケッチに対して同じ結果を返します。例については、 結合されたバイナリスケッチのカーディナリティ推定値を返します。 をご参照ください。