

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Hyperloglog 関数
<a name="hyperloglog-functions"></a>

SQL の HyperLogLog (HLL) 関数は、実際の一意の要素のセットが保存されていない場合でも、大規模なデータセット内の一意の要素 (カーディナリティ) の数を効率的に推定する方法を提供します。

HLL 関数を使用する主な利点は次のとおりです。
+ **メモリ効率**: HLL スケッチは、一意の要素の完全なセットを保存するよりもはるかに少ないメモリを必要とするため、大規模なデータセットに適しています。
+ **分散コンピューティング**: HLL スケッチは複数のデータソースまたは処理ノードにまたがって組み合わせることができるため、効率的な分散一意数推定が可能になります。
+ **おおよその結果**: HLL は、精度とメモリ使用量の間の調整可能なトレードオフ (精度パラメータを使用) により、おおよその一意のカウントの推定を提供します。

これらの関数は、分析、データウェアハウス、リアルタイムストリーム処理アプリケーションなど、一意の項目の数を見積もる必要があるシナリオで特に役立ちます。

AWS Clean Rooms は、次の HLL 関数をサポートしています。

**Topics**
+ [HLL\$1SKETCH\$1AGG 関数](HLL_SKETCH_AGG.md)
+ [HLL\$1SKETCH\$1ESTIMATE 関数](HLL_SKETCH_ESTIMATE.md)
+ [HLL\$1UNION 関数](HLL_UNION.md)
+ [HLL\$1UNION\$1AGG 関数](HLL_UNION_AGG.md)

# HLL\$1SKETCH\$1AGG 関数
<a name="HLL_SKETCH_AGG"></a>

HLL\$1SKETCH\$1AGG 集計関数は、指定された列の値から HLL スケッチを作成します。入力式の値をカプセル化する HLLSKETCH データ型を返します。

HLL\$1SKETCH\$1AGG 集計関数は任意のデータ型で動作し、NULL 値を無視します。

テーブルに行がない場合、またはすべての行が NULL の場合、結果のスケッチには `{"version":1,"logm":15,"sparse":{"indices":[],"values":[]}}` などのインデックスと値のペアがありません。

## 構文
<a name="HLL_SKETCH_AGG-synopsis"></a>

```
HLL_SKETCH_AGG (aggregate_expression[, lgConfigK ] )
```

## 引数
<a name="HLL_SKETCH_AGG-argument"></a>

 *aggregate\$1expression*   
一意のカウントが発生する INT、BIGINT、STRING、または BINARY 型の式。`NULL` 値はすべて無視されます。

*lgConfigK*  
デフォルトの 12 を含む、4 から 21 までのオプションの INT 定数。K の log-base-2。ここで、K はスケッチのバケットまたはスロットの数です。

## 戻り型
<a name="HLL_SKETCH_AGG-return-type"></a>

HLL\$1SKETCH\$1AGG 関数は、集計グループ内のすべての入力値を消費および集計したために計算された HyperLogLog スケッチを含む NULL 以外の BINARY バッファを返します。

## 例
<a name="HLL_SKETCH_AGG-examples"></a>

次の例では、HyperLogLog (HLL) アルゴリズムを使用して、 `col` 列の値の個別の数を推定します。`hll_sketch_agg(col, 12)` 関数は col 列の値を集計し、精度 12 を使用して HLL スケッチを作成します。次に、 `hll_sketch_estimate()`関数を使用して、生成された HLL スケッチに基づいて個別の値のカウントを推定します。クエリの最終結果は 3 で、`col`列の値の推定個別数を表します。この場合、個別の値は 1、2、3 です。

```
SELECT hll_sketch_estimate(hll_sketch_agg(col, 12))
    FROM VALUES (1), (1), (2), (2), (3) tab(col);
  3
```

次の例では、HLL アルゴリズムを使用して`col`列の値の個別の数を推定しますが、HLL スケッチの精度値は指定しません。この場合、デフォルトの精度である 14 が使用されます。`hll_sketch_agg(col)` 関数は `col`列の値を取得し、HyperLogLog (HLL) スケッチを作成します。これは、要素の個別の数を推定するために使用できるコンパクトなデータ構造です。`hll_sketch_estimate(hll_sketch_agg(col))` 関数は、前のステップで作成した HLL スケッチを取得し、 `col` 列の値の個別の数の推定値を計算します。クエリの最終結果は 3 で、`col`列の値の推定個別数を表します。この場合、個別の値は 1、2、3 です。

```
SELECT hll_sketch_estimate(hll_sketch_agg(col))
FROM VALUES (1), (1), (2), (2), (3) tab(col);
3
```

# HLL\$1SKETCH\$1ESTIMATE 関数
<a name="HLL_SKETCH_ESTIMATE"></a>

HLL\$1SKETCH\$1ESTIMATE 関数は HLL スケッチを取得し、スケッチで表される一意の要素の数を推定します。HyperLogLog (HLL) アルゴリズムを使用して、特定の列の一意の値の数の確率的近似をカウントし、HLL\$1SKETCH\$1AGG 関数によって以前に生成されたスケッチバッファと呼ばれるバイナリ表現を消費し、結果を大きな整数として返します。

HLL スケッチアルゴリズムは、大きなデータセットであっても、一意の値のセットをすべて保存することなく、一意の要素の数を効率的に推定する方法を提供します。

`hll_union` 関数と `hll_union_agg`関数は、これらのバッファを入力として消費およびマージすることで、スケッチを組み合わせることもできます。

## 構文
<a name="HLL_SKETCH_ESTIMATE-synopsis"></a>

```
HLL_SKETCH_ESTIMATE (hllsketch_expression)
```

## 引数
<a name="HLL_SKETCH_ESTIMATE-argument"></a>

 *hllsketch\$1expression*   
HLL\$1SKETCH\$1AGG によって生成されたスケッチを保持する`BINARY`式

## 戻り型
<a name="HLL_SKETCH_ESTIMATE-return-type"></a>

HLL\$1SKETCH\$1ESTIMATE 関数は、入力スケッチで表されるおおよその個別カウントである BIGINT 値を返します。

## 例
<a name="HLL_SKETCH_ESTIMATE-examples"></a>

次の例では、HyperLogLog (HLL) スケッチアルゴリズムを使用して、`col`列の値の基数 (一意の数) を推定します。`hll_sketch_agg(col, 12)` 関数は `col`列を取得し、12 ビットの精度を使用して HLL スケッチを作成します。HLL スケッチは、セット内の一意の要素の数を効率的に推定できるおおよそのデータ構造です。`hll_sketch_estimate()` 関数は、 によって作成された HLL スケッチ`hll_sketch_agg`を取得し、スケッチによって表される値の基数 (一意の数) を推定します。は 5 行のテストデータセット`FROM VALUES (1), (1), (2), (2), (3) tab(col);`を生成します。この`col`列には 1、1、2、2、3 の値が含まれます。このクエリの結果は、`col`列の値の推定一意数 3 です。

```
SELECT hll_sketch_estimate(hll_sketch_agg(col, 12))
    FROM VALUES (1), (1), (2), (2), (3) tab(col);
  3
```

次の例と前の例の違いは、精度パラメータ (12 ビット) が`hll_sketch_agg`関数呼び出しで指定されていないことです。この場合、デフォルトの精度である 14 ビットが使用されます。これにより、12 ビットの精度を使用した前の例と比較して、一意のカウントのより正確な推定が得られます。

```
SELECT hll_sketch_estimate(hll_sketch_agg(col))
FROM VALUES (1), (1), (2), (2), (3) tab(col);
3
```

# HLL\$1UNION 関数
<a name="HLL_UNION"></a>

HLL\$1UNION 関数は、2 つの HLL スケッチを 1 つの統合スケッチに結合します。HyperLogLog (HLL) アルゴリズムを使用して、2 つのスケッチを 1 つのスケッチに結合します。クエリは、結果のバッファを使用して、`hll_sketch_estimate`関数でおおよその一意の数を長い整数として計算できます。

## 構文
<a name="HLL_UNION-syntax"></a>

```
HLL_UNION (( expr1, expr2 [, allowDifferentLgConfigK ] ))
```

## 引数
<a name="HLL_UNION-argument"></a>

 *exprN*   
HLL\$1SKETCH\$1AGG によって生成されたスケッチを保持する`BINARY`式。

*allowDifferentLgConfigK*  
異なる lgConfigK 値を持つ 2 つのスケッチのマージを許可するかどうかを制御するオプションの BOOLEAN 式。デフォルト値は `false` です。

## 戻り型
<a name="HLL_UNION-return-type"></a>

HLL\$1UNION 関数は、入力式を組み合わせた結果として計算された HyperLogLog スケッチを含む BINARY バッファを返します。`allowDifferentLgConfigK` パラメータが の場合`true`、結果スケッチは 2 つの指定された`lgConfigK`値のうち小さい方を使用します。

## 例
<a name="HLL_UNION-examples"></a>

次の例では、HyperLogLog (HLL) スケッチアルゴリズムを使用して、データセット`col2`内の 2 つの列 `col1`と の値の一意の数を推定します。

 `hll_sketch_agg(col1)` 関数は、`col1`列内の一意の値の HLL スケッチを作成します。

`hll_sketch_agg(col2)` 関数は、col2 列の一意の値の HLL スケッチを作成します。

この`hll_union(...)`関数は、ステップ 1 と 2 で作成した 2 つの HLL スケッチを 1 つの統合 HLL スケッチに結合します。

`hll_sketch_estimate(...)` 関数は、結合された HLL スケッチを取得し、 `col1` と の両方の値の一意の数を推定します`col2`。

`FROM VALUES` 句は 5 行のテストデータセットを生成します。 `col1`には値 1、1、2、2、3 が含まれ、 には値 4、4、5、5、6 `col2`が含まれます。

このクエリの結果は、 `col1`と の両方の値の推定一意数であり`col2`、6 です。HLL スケッチアルゴリズムは、大きなデータセットであっても、一意の値のセットをすべて保存することなく、一意の要素の数を効率的に推定する方法を提供します。この例では、 `hll_union`関数を使用して 2 つの列の HLL スケッチを組み合わせます。これにより、列ごとにだけでなく、データセット全体で一意の数を推定できます。

```
SELECT hll_sketch_estimate(
  hll_union(
    hll_sketch_agg(col1),
    hll_sketch_agg(col2)))
  FROM VALUES
    (1, 4),
    (1, 4),
    (2, 5),
    (2, 5),
    (3, 6) AS tab(col1, col2);
  6
```

次の例と前の例の違いは、精度パラメータ (12 ビット) が`hll_sketch_agg`関数呼び出しで指定されていないことです。この場合、デフォルトの精度である 14 ビットが使用されます。これにより、12 ビットの精度を使用した前の例と比較して、一意のカウントのより正確な推定が得られます。

```
SELECT hll_sketch_estimate(
  hll_union(
    hll_sketch_agg(col1, 14),
    hll_sketch_agg(col2, 14)))
  FROM VALUES
    (1, 4),
    (1, 4),
    (2, 5),
    (2, 5),
    (3, 6) AS tab(col1, col2);
```

# HLL\$1UNION\$1AGG 関数
<a name="HLL_UNION_AGG"></a>

HLL\$1UNION\$1AGG 関数は、複数の HLL スケッチを 1 つの統合スケッチに結合します。HyperLogLog (HLL) アルゴリズムを使用して、スケッチのグループを 1 つのスケッチに結合します。クエリは、結果のバッファを使用して、`hll_sketch_estimate`関数でおおよその一意数を計算できます。

## 構文
<a name="HLL_UNION_AGG-syntax"></a>

```
HLL_UNION_AGG ( expr [, allowDifferentLgConfigK ] )
```

## 引数
<a name="HLL_UNION_AGG-argument"></a>

 expr**   
HLL\$1SKETCH\$1AGG によって生成されたスケッチを保持する`BINARY`式。

*allowDifferentLgConfigK*  
異なる lgConfigK 値を持つ 2 つのスケッチのマージを許可するかどうかを制御するオプションの BOOLEAN 式。デフォルト値は `false` です。

## 戻り型
<a name="HLL_UNION_AGG-return-type"></a>

HLL\$1UNION\$1AGG 関数は、同じグループの入力式を結合した結果、計算された HyperLogLog スケッチを含む BINARY バッファを返します。`allowDifferentLgConfigK` パラメータが の場合`true`、結果スケッチは 2 つの指定された`lgConfigK`値のうち小さい方を使用します。

## 例
<a name="HLL_UNION_AGG-examples"></a>

次の例では、HyperLogLog (HLL) スケッチアルゴリズムを使用して、複数の HLL スケッチにわたる値の一意の数を推定します。

最初の例では、データセット内の値の一意の数を推定します。

```
SELECT hll_sketch_estimate(hll_union_agg(sketch, true))
    FROM (SELECT hll_sketch_agg(col) as sketch
            FROM VALUES (1) AS tab(col)
          UNION ALL
          SELECT hll_sketch_agg(col, 20) as sketch
            FROM VALUES (1) AS tab(col));
  1
```

内部クエリは 2 つの HLL スケッチを作成します。
+ 最初の SELECT ステートメントは、1 つの値からスケッチを作成します。
+ 2 番目の SELECT ステートメントは、別の 1 つの値 1 からスケッチを作成しますが、精度は 20 です。

外部クエリは HLL\$1UNION\$1AGG 関数を使用して、2 つのスケッチを 1 つのスケッチに結合します。次に、HLL\$1SKETCH\$1ESTIMATE 関数をこの組み合わせスケッチに適用して、値の一意の数を推定します。

このクエリの結果は、 `col`列の値の推定一意数です`1`。つまり、2 つの入力値 1 は、同じ値であっても一意であると見なされます。

2 番目の例には、HLL\$1UNION\$1AGG 関数の別の精度パラメータが含まれています。この場合、両方の HLL スケッチは 14 ビットの精度で作成されるため、 `true`パラメータ`hll_union_agg`で を使用して正常に組み合わせることができます。

```
SELECT hll_sketch_estimate(hll_union_agg(sketch, true))
    FROM (SELECT hll_sketch_agg(col, 14) as sketch
            FROM VALUES (1) AS tab(col)
          UNION ALL
          SELECT hll_sketch_agg(col, 14) as sketch
            FROM VALUES (1) AS tab(col));
  1
```

クエリの最終結果は推定一意数であり、この場合も です`1`。つまり、2 つの入力値 1 は、同じ値であっても一意であると見なされます。