Amazon Redshift での HyperLogLog スケッチの使用 - Amazon Redshift

Amazon Redshift での HyperLogLog スケッチの使用

HyperLogLog は,多重セットの基数を推定するために使用されるアルゴリズムです。Cardinality とは、多重セット内の個別値の数を指します。たとえば、{4,3,6,2,2,6,4,3,6,2,2,3} のセットでは、基数は 4 で、4、3、6、2 という個別の値を持ちます。

HyperLogLog アルゴリズムの精度 (m 値とも呼ばれる) は、推定基数の精度に影響を与える可能性があります。基数の推定では、Amazon Redshift はデフォルトの精度値 15 を使用します。小さいデータセットでは、この値は最大 26 になる可能性があります。したがって、平均相対誤差の範囲は 0.01~0.6% です。

多重セットの基数を計算するとき、HyperLogLog アルゴリズムは、HLL スケッチと呼ばれる構成を生成します。HLL スケッチは、多重セット内の個別値に関する情報をカプセル化します。Amazon Redshift データ型 HLLSKETCH は、このようなスケッチ値を表します。このデータ型は、Amazon Redshift テーブルにスケッチを保存するために使用できます。さらに、Amazon Redshift は、集計関数およびスカラー関数として HLLSKETCH 値に適用できるオペレーションをサポートしています。これらの関数を使用して、HLLSKETCH の基数を抽出し、複数の HLLSKETCH 値を組み合わせることができます。

HLLSKETCH データ型は、大規模なデータセットから基数を抽出するときに、クエリのパフォーマンスに大きな利点をもたらします。これらのデータセットは、HLLSKETCH 値を使用して事前に集計し、テーブルに保存できます。Amazon Redshift は、基になるデータセットにアクセスすることなく、保存されている HLLSKETCH 値から直接基数を抽出できます。

HLL スケッチを処理する場合、Amazon Redshift はスケッチのメモリフットプリントを最小限に抑え、抽出された基数の精度を最大化する最適化を実行します。Amazon Redshift は、HLL スケッチに疎と蜜といった 2 つの表現を使用します。HLLSKETCH は疎フォーマットで始まります。新しい値が挿入されると、そのサイズが大きくなります。そのサイズが密表現のサイズに達すると、Amazon Redshift はスケッチを疎から密に自動的に変換します。

Amazon Redshift は、スケッチが疎形式の場合、HLLSKETCH を JSON としてインポート、エクスポート、およびプリントします。Amazon Redshift は、スケッチが密集形式の場合、HLLSKETCH を Base64 文字列としてインポート、エクスポート、およびプリントします。UNLOAD の詳細については、HLLSKETCH データ型のアンロード を参照してください。テキストまたはコンマ区切り値 (CSV) データを Amazon Redshift にインポートするには、COPY コマンドを使用します。詳細については、「HLLSKETCH データ型のロード」を参照してください。

HyperLogLog で使用される関数の詳細については、HyperLogLog 関数 を参照してください。