HyperLogLog++ 関数は近似集計関数です。データ量が大きい場合、少量のメモリを使用してデータの重複を高速に排除し、クエリを高速化できます。このトピックでは、HyperLogLog++ 関数について説明します。
背景情報
HyperLogLog (略称 HLL) は、効率的な近似重複排除アルゴリズムです。ページビュー (PV) やユニークビジター (UV) の統計など、高い精度が要求されないシナリオに適しており、 COUNT(DISTINCT) の軽量な代替手段として機能します。ビットマップなどの正確な重複排除方法とは異なり、 HLL は内部で固定サイズのデータ構造 (スケッチ) を使用するため、メモリ使用量はデータ量の増加に伴って増えません。新しいデータが追加される際に必要なのは、1 回のハッシュ計算のみです。大量のデータに対して、 HLL の重複排除エラーは通常 1% 以内、場合によってはそれ以下に抑えられ、効率性と実用性のバランスが取れています。
基本的な近似重複排除の要件を満たすため、MaxCompute は集計関数 APPROX_DISTINCT を提供しています。ビジネスシナリオがますます多様化するにつれて、最終的な重複排除結果を出力するだけでなく、中間スケッチデータ構造を保存または再利用したいというユーザーが増えています。このニーズに対応するため、MaxCompute は HyperLogLog++ 関数セット一式のサポートを追加し、基盤となるアルゴリズムを最適化しました。これにより、メモリ使用量を削減すると同時に推定精度をさらに向上させ、複雑な分析シナリオをより適切にサポートします。
以下は、HLL の 2 つの典型的なシナリオです。
-
時間ディメンションでの繰り返しクエリが必要なシナリオ:日次で生成された HLL スケッチを永続化することで、後続の計算では当日の新規追加データのみを処理し、履歴スケッチとマージするだけで済みます。履歴データ全体を繰り返しスキャンする必要がなくなり、クエリ効率が大幅に向上します。
-
同じ型の複数列を共同で重複排除する必要があるシナリオ:各列に対応するスケッチを構築して保持し、その後スケッチレベルで直接マージ操作を実行できます。これにより、重複排除結果の効率的な再利用が可能になり、計算オーバーヘッドが大幅に削減されます。
関数一覧
MaxCompute SQL は、以下の HyperLogLog++ 関数をサポートしています。
|
関数 |
説明 |
|
同じ型の値を集計し、新しい HLL++ スケッチを生成します。 |
|
|
同じストレージ形式の複数の HLL++ スケッチをマージし、新しいスケッチを生成します。 |
|
|
HLL++ スケッチからカーディナリティ推定値を計算します。 |
|
|
同じストレージ形式の複数の HLL++ スケッチをマージし、マージ後のスケッチのカーディナリティ推定値を返します。 |
注意事項
HLL_COUNT_EXTRACT/HLL_COUNT_MERGE/HLL_COUNT_MERGE_PARTIAL 関数で使用するバイナリデータは、 HLL_COUNT_INIT 関数で出力されたものである必要があります。