メインコンテンツまでスキップ

HLL

HLL(HyperLogLog)

説明

HLL(HyperLogLog)は、近似的な重複カウントに使用されます。

HLLが使用するストレージスペースは、ハッシュ値の重複する値によって決まります。ストレージスペースは次の3つの条件によって異なります:

  • HLLが空の場合。HLLに値が挿入されず、最も低いストレージコストが80バイトです。
  • HLL内の異なるハッシュ値の数が160以下の場合。最も高いストレージコストは1360バイトです(80 + 160 * 8 = 1360)。
  • HLL内の異なるハッシュ値の数が160より大きい場合。ストレージコストは固定され、16464バイトです(80 + 16 * 1024 = 16464)。

実際のビジネスシナリオでは、データの量とデータの分布がクエリのメモリ使用量と近似結果の精度に影響します。以下の2つの要素を考慮する必要があります。

  • データの量:HLLは近似値を返します。データの量が多いほど、より正確な結果が得られます。データの量が少ないと、偏差が大きくなります。
  • データの分布:大量のデータと高基数の次元列をGROUP BYで使用する場合、データの計算にはより多くのメモリが使用されます。この場合、HLLは推奨されません。低基数の次元列でのno-group-by count distinctまたはGROUP BYを実行する場合におすすめです。
  • クエリの粒度:大きなクエリ粒度でデータをクエリする場合、データの量を減らすためにAggregateテーブルやマテリアライズドビューを使用してデータを事前集約することをおすすめします。

HLLの使用方法の詳細については、近似的な重複カウントにHLLを使用するおよびHLLを参照してください。

テーブルを作成する際に列のタイプをHLLと指定し、hll_union()関数を使用してデータを集約します。

CREATE TABLE hllDemo
(
k1 TINYINT,
v1 HLL HLL_UNION
)
ENGINE=olap
AGGREGATE KEY(k1)
DISTRIBUTED BY HASH(k1);