BITMAP
BITMAP は、count distinct を高速化するためによく使用されます。HyperLogLog (HLL) に似ていますが、count distinct においてより正確です。BITMAP は、より多くのメモリとディスクリソースを消費します。INT データの集計のみをサポートします。文字列データに bitmap を適用したい場合は、低カーディナリティの辞書を使用してデータをマッピングする必要があります。
このトピックでは、BITMAP カラムを作成し、そのカラムのデータを集計するために bitmap 関数を使用する簡単な例を提供します。関数の詳細な定義やその他の Bitmap 関数については、「Bitmap functions」を参照してください。
テーブルを作成する
-
user_idカラムのデータ型が BITMAP であり、bitmap_union() 関数を使用してデータを集計する集計テーブルを作成します。CREATE TABLE `pv_bitmap` (`dt` int(11) NULL COMMENT "",`page` varchar(10) NULL COMMENT "",`user_id` bitmap BITMAP_UNION NULL COMMENT "") ENGINE=OLAPAGGREGATE KEY(`dt`, `page`)COMMENT "OLAP"DISTRIBUTED BY HASH(`dt`); -
useridカラムのデータ型が BITMAP である主キーテーブルを作成します。CREATE TABLE primary_bitmap (`tagname` varchar(65533) NOT NULL COMMENT "Tag name",`tagvalue` varchar(65533) NOT NULL COMMENT "Tag value",`userid` bitmap NOT NULL COMMENT "User ID")ENGINE=OLAPPRIMARY KEY(`tagname`, `tagvalue`)COMMENT "OLAP"DISTRIBUTED BY HASH(`tagname`);
BITMAP カラムにデータを挿入する前に、まず to_bitmap() 関数を使用してデータを変換する必要があります。
BITMAP の使用方法、たとえばテーブルに BITMAP データをロードする方法の詳細については、bitmap を参照してください。