APPROX_COUNT_DISTINCT¶
HyperLogLog を使用して、入力の異なるカーディナリティの近似値を返します(つまり、 HLL(col1, col2, ... )
は COUNT(DISTINCT col1, col2, ... )
の近似値を返します)。
HyperLogLog の詳細については、 異なる値の数の推定 をご参照ください。
- エイリアス:
HLL。
- こちらもご参照ください。
構文¶
集計関数
APPROX_COUNT_DISTINCT( [ DISTINCT ] <expr1> [ , ... ] )
APPROX_COUNT_DISTINCT(*)
ウィンドウ関数
APPROX_COUNT_DISTINCT( [ DISTINCT ] <expr1> [ , ... ] ) OVER ( [ PARTITION BY <expr2> ] )
APPROX_COUNT_DISTINCT(*) OVER ( [ PARTITION BY <expr2> ] )
引数¶
expr1
これは、個別の値の数を知るときの式です。
expr2
これは、行をパーティションにグループ化するために使用されるオプションの式です。
*
NULL の値を持つ記録を除いた、記録総数の近似値を返します。
関数にワイルドカードを渡す場合、ワイルドカードをテーブルの名前またはエイリアスで修飾することができます。例えば、
mytable
というテーブルからすべての列を渡すには、以下のように指定します。(mytable.*)
ILIKE と EXCLUDE キーワードを使ってフィルタリングすることもできます。
ILIKE は、指定されたパターンに一致する列名でフィルターします。許されるパターンは1つのみです。例:
(* ILIKE 'col1%')
EXCLUDE は、指定された列に一致しない列名をフィルターします。例:
(* EXCLUDE col1) (* EXCLUDE (col1, col2))
修飾子は、これらのキーワードを使用する場合に有効です。以下の例では、 ILIKE キーワードを使用して、テーブル
mytable
内のパターンcol1%
に一致するすべての列をフィルターします。(mytable.* ILIKE 'col1%')
ILIKE と EXCLUDE キーワードは、1つの関数呼び出し内で組み合わせることはできません。
この関数では、 ILIKE と EXCLUDE キーワードは SELECT リストまたは GROUP BY 句でのみ有効です。
ILIKE と EXCLUDE キーワードの詳細については、 SELECT の「パラメータ」セクションをご参照ください。
戻り値¶
戻り値のデータ型はINTEGERです。
使用上の注意¶
計算は概算ですが、確定的です。この関数が同じ入力データで呼び出された場合、この関数は同じ結果を返します。
NULL 値と集計関数の詳細については、 集計関数と NULL 値 をご参照ください。
この関数がウィンドウ関数として呼び出される場合、以下はサポートされていません。
OVER 句内の ORDER BY 句。
明示的なウィンドウフレーム。
例¶
この例は、 APPROX_COUNT_DISTINCT とそのエイリアス HLLの使用方法を示しています。この例では、 COUNT(DISTINCT i)
と APPROX_COUNT_DISTINCT(i)
の両方を呼び出して、それら2つの関数の結果が常時完全に一致するとは限らないことを強調しています。
APPROX_COUNT_DISTINCT は正確な値ではなく近似値を返すため、次のクエリの正確な出力は異なる場合があります。
SELECT COUNT(i), COUNT(DISTINCT i), APPROX_COUNT_DISTINCT(i), HLL(i)
FROM sequence_demo;
+----------+-------------------+--------------------------+--------+
| COUNT(I) | COUNT(DISTINCT I) | APPROX_COUNT_DISTINCT(I) | HLL(I) |
|----------+-------------------+--------------------------+--------|
| 1024 | 1024 | 1007 | 1007 |
+----------+-------------------+--------------------------+--------+