カテゴリ:

集計関数 (Cardinality Estimation) , ウィンドウ関数

DATASKETCHES_HLL

入力の異なるカーディナリティの近似値を返します(つまり、 DATASKETCHES_HLL(col1)COUNT(DISTINCT col1) の近似値を返します)。

この関数は、Apache DataSketches で使われている形式のバイナリスケッチを読むことができる HLL HyperLogLog 関数のバージョンです。詳細については、 Apache DataSketches ドキュメント をご参照ください。

こちらもご参照ください。

DATASKETCHES_HLL_ACCUMULATEDATASKETCHES_HLL_COMBINEDATASKETCHES_HLL_ESTIMATE

構文

集計関数

DATASKETCHES_HLL( [ DISTINCT ] <expr1> [ , <max_log_k> ] )
Copy

ウィンドウ関数

DATASKETCHES_HLL( [ DISTINCT ] <expr1> [ , <max_log_k> ] )
  OVER ( [ PARTITION BY <expr2> ] )
Copy

必要な引数

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);
      
      Copy
      SELECT DATASKETCHES_HLL_ACCUMULATE(TO_BINARY(HEX_ENCODE(1), 'HEX'));
      
      Copy
    • 浮動小数点数のデータ型 (例えば、 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;
Copy

以下の例では、テーブルのデータを使用しています。

列内のグループ化されたデータの推定カーディナリティを返します。

DATASKETCHES_HLL 関数を使用して、 g 列の値でグループ化された、 v 列のデータの異なるカーディナリティを概算します。

SELECT g,
       DATASKETCHES_HLL(v),
       COUNT(DISTINCT v)
  FROM datasketches_demo GROUP BY g;
Copy
+---+---------------------+-------------------+
| G | DATASKETCHES_HLL(V) | COUNT(DISTINCT V) |
|---+---------------------+-------------------|
| 1 |         2.000000005 |                 2 |
| 2 |         3.000000015 |                 3 |
+---+---------------------+-------------------+

出力は、列 g の値 1 に対して、列 v に約2つの異なる値(つまり、 12)があることを示しています。列 g の値 2 に対して、列 v には約3つの異なる値があります(つまり、 14、および 5)。 COUNT(DISTINCT v)) を呼び出すと、推定値ではなく異なる値の正確な数値が返されます。

DATASKETCHES_HLL_ACCUMULATE 関数を使用してグループ化されたデータからバイナリスケッチを作成した場合、 DATASKETCHES_HLL_ESTIMATE 関数は累積されたスケッチに対して同じ結果を返します。例については、 蓄積されたバイナリスケッチのカーディナリティ推定値を返します。 をご参照ください。

列内の全データの推定カーディナリティを返します。

DATASKETCHES_HLL 関数を使用して、列 v のすべてのデータの異なるカーディナリティを概算します。

SELECT DATASKETCHES_HLL(v),
       COUNT(DISTINCT v)
  FROM datasketches_demo;
Copy
+---------------------+-------------------+
| DATASKETCHES_HLL(V) | COUNT(DISTINCT V) |
|---------------------+-------------------|
|          4.00000003 |                 4 |
+---------------------+-------------------+

出力は、列 v (すなわち、 1245)に約4つの異なる値があることを示しています。 COUNT(DISTINCT v)) を呼び出すと、推定値ではなく異なる値の正確な数値が返されます。

DATASKETCHES_HLL_ACCUMULATE 関数を使用してグループ化されたデータからバイナリスケッチを作成し、 DATASKETCHES_HLL_COMBINE 関数を使用してスケッチを1つの統一されたスケッチに結合すると、 DATASKETCHES_HLL_ESTIMATE 関数は統一されたスケッチに対して同じ結果を返します。例については、 結合されたバイナリスケッチのカーディナリティ推定値を返します。 をご参照ください。