標準 SQL の HyperLogLog++ 関数

BigQuery では、HyperLogLog++ アルゴリズムを使用する次の近似集計関数がサポートされています。近似集計関数の機能については、近似集計をご覧ください。

HLL_COUNT.INIT

HLL_COUNT.INIT(input [, precision])

説明

1 つ以上の input 値を取り、それらの値を HyperLogLog++ スケッチに集約するスカラー関数です。各スケッチは BYTES データ型で表現されます。スケッチは、HLL_COUNT.MERGE または HLL_COUNT.MERGE_PARTIAL で結合できます。結合の必要がない場合には、HLL_COUNT.EXTRACT で個別の値の最終カウントを抽出できます。

input は、以下のいずれかになります。

  • INT64
  • STRING
  • BYTES

この関数では、省略可能なパラメータ precision を使用できます。このパラメータは概算値の精度を定義します。スケッチを処理したり、ディスクに保存したりするため、追加のメモリが必要になります。以下の表に、使用可能な精度、グループごとの最大スケッチサイズ、標準精度の信頼区間(CI)を示します。

精度 最大スケッチサイズ(KiB) 65% CI 95% CI 99% CI
10 1 ±1.63% ±3.25% ±6.50%
11 2 ±1.15% ±2.30% ±4.60%
12 4 ±0.81% ±1.63% ±3.25%
13 8 ±0.57% ±1.15% ±1.72%
14 16 ±0.41% ±0.81% ±1.22%
15(デフォルト) 32 ±0.29% ±0.57% ±0.86%
16 64 ±0.20% ±0.41% ±0.61%
17 128 ±0.14% ±0.29% ±0.43%
18 256 ±0.10% ±0.20% ±0.41%
19 512 ±0.07% ±0.14% ±0.29%
20 1,024 ±0.05% ±0.10% ±0.20%
21 2,048 ±0.04% ±0.07% ±0.14%
22 4,096 ±0.03% ±0.05% ±0.10%
23 8,192 ±0.02% ±0.04% ±0.07%
24 16,384 ±0.01% ±0.03% ±0.05%

入力が NULL の場合、この関数は NULL を返します。

詳細については、HyperLogLog の実践: 最新のカーディナリティ推測アルゴリズムをご覧ください。

サポートされる入力型

BYTES

戻り値の型

BYTES

SELECT
  HLL_COUNT.INIT(respondent) AS respondents_hll,
  flavor,
  country
FROM UNNEST([
  STRUCT(1 AS respondent, "Vanilla" AS flavor, "CH" AS country),
  (1, "Chocolate", "CH"),
  (2, "Chocolate", "US"),
  (2, "Strawberry", "US")])
GROUP BY flavor, country;

HLL_COUNT.MERGE

HLL_COUNT.MERGE(sketch)

説明

複数の HyperLogLog++ セットスケッチを結合してカーディナリティを返す集計関数です。

それぞれの sketch は同じ精度にし、同じ型で初期化する必要があります。精度や型が異なるスケッチを結合すると、エラーが発生します。たとえば、INT64 データから初期化したスケッチと STRING データから初期化したスケッチは結合できません。

この関数は、スケッチを結合するときに NULL 値を無視します。行がない場合や NULL 値しか存在しない場合には、0 を返します。

サポートされる入力型

BYTES

戻り値の型

INT64

SELECT HLL_COUNT.MERGE(respondents_hll) AS num_respondents, flavor
FROM (
  SELECT
    HLL_COUNT.INIT(respondent) AS respondents_hll,
    flavor,
    country
  FROM UNNEST([
    STRUCT(1 AS respondent, "Vanilla" AS flavor, "CH" AS country),
    (1, "Chocolate", "CH"),
    (2, "Chocolate", "US"),
    (2, "Strawberry", "US")])
  GROUP BY flavor, country)
GROUP BY flavor;

HLL_COUNT.MERGE_PARTIAL

HLL_COUNT.MERGE_PARTIAL(sketch)

説明

1 つ以上の HyperLogLog++ sketch 入力を取り、それらを新しいスケッチに結合する集計関数です。

入力がないか、すべての入力が NULL の場合、この関数は NULL を返します。

サポートされる入力型

BYTES

戻り値の型

BYTES

SELECT HLL_COUNT.MERGE_PARTIAL(respondents_hll) AS num_respondents, flavor
FROM (
  SELECT
    HLL_COUNT.INIT(respondent) AS respondents_hll,
    flavor,
    country
  FROM UNNEST([
    STRUCT(1 AS respondent, "Vanilla" AS flavor, "CH" AS country),
    (1, "Chocolate", "CH"),
    (2, "Chocolate", "US"),
    (2, "Strawberry", "US")])
  GROUP BY flavor, country)
GROUP BY flavor;

HLL_COUNT.EXTRACT

HLL_COUNT.EXTRACT(sketch)

説明

1 つの HyperLogLog++ スケッチからカーディナリティの推測値を抽出するスカラー関数です。

sketch が NULL の場合、この関数はカーディナリティの推測値として 0 を返します。

サポートされる入力型

BYTES

戻り値の型

INT64

SELECT
  flavor,
  country,
  HLL_COUNT.EXTRACT(respondents_hll) AS num_respondents
FROM (
  SELECT
    HLL_COUNT.INIT(respondent) AS respondents_hll,
    flavor,
    country
  FROM UNNEST([
    STRUCT(1 AS respondent, "Vanilla" AS flavor, "CH" AS country),
    (1, "Chocolate", "CH"),
    (2, "Chocolate", "US"),
    (2, "Strawberry", "US")])
  GROUP BY flavor, country);

+------------+---------+-----------------+
| flavor     | country | num_respondents |
+------------+---------+-----------------+
| Vanilla    | CH      | 1               |
| Chocolate  | CH      | 1               |
| Chocolate  | US      | 1               |
| Strawberry | US      | 1               |
+------------+---------+-----------------+
このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...