カテゴリ:

集計関数 (カーディナリティ推定)、 ウィンドウ関数

APPROX_COUNT_DISTINCT

HyperLogLog を使用して、入力の異なるカーディナリティの近似値を返します(つまり、 HLL(col1, col2, ... )COUNT(DISTINCT col1, col2, ... ) の近似値を返します)。

HyperLogLog の詳細については、 異なる値の数の推定 をご参照ください。

エイリアス:

HLL

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

HLL_ACCUMULATEHLL_COMBINEHLL_ESTIMATE

構文

集計関数

APPROX_COUNT_DISTINCT( [ DISTINCT ] <expr1>  [ , ... ] )

APPROX_COUNT_DISTINCT(*)

ウィンドウ関数

APPROX_COUNT_DISTINCT( [ DISTINCT ] <expr1>  [ , ... ] ) OVER ( [ PARTITION BY <expr2> ] )

APPROX_COUNT_DISTINCT(*) OVER ( [ PARTITION BY <expr2> ] )

引数

式1

これは、個別の値の数を知るときの式です。

式2

これは、行をパーティションにグループ化するために使用されるオプションの式です。

戻り値

返される値のデータ型は INTEGER です。

使用上の注意

  • 計算は概算ですが、確定的です。この関数が同じ入力データで呼び出された場合、この関数は同じ結果を返します。

  • NULL 値と集計関数の詳細については、 集計関数と NULL 値 をご参照ください。

  • ウィンドウ関数として使用する場合、

    • この関数は次をサポートしていません。

      • OVER()句のORDER BY サブ句。

      • ウィンドウフレーム。

この例は、 APPROX_COUNT_DISTINCT とそのエイリアス HLLの使用方法を示しています。この例では、 COUNT(DISTINCT i)APPROX_COUNT_DISTINCT(i) の両方を呼び出して、結果が常に完全に一致するとは限らないことを強調しています。

SELECT COUNT(i), COUNT(DISTINCT i), APPROX_COUNT_DISTINCT(i), HLL(i)
  FROM sequence_demo;

出力:

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 |                     1030 |   1030 |
+----------+-------------------+--------------------------+--------+