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);