このトピックでは、Hologres でワイドテーブルを使用してタグコンピューティングを実行するためのベストプラクティスについて説明します。
背景情報
オフラインデータウェアハウスモデルでは、ユーザタグデータは、テーマ別およびディメンション別の複数のテーブルに格納されます。これは、タグシステムを構築し、データを維持および管理するのに役立ちます。ただし、このようなデータモデルをオンラインプロファイル分析で使用してタグデータを整理する場合、複数のタグテーブルを結合してタグをフィルタリングする必要がありますが、これはデータベースサービスにとってコストがかかりすぎます。
ソリューション
ワイドテーブルソリューションでは、安定したプロパティテーブルがオフラインでワイドテーブルに集約され、複数のテーブルに対する JOIN 操作が単一のワイドテーブルに対する操作に変換されます。新しいタグが必要な場合は、これらのタグ用にワイドテーブルに列が追加されます。次の図はこのソリューションを示しています。このソリューションは、次のシナリオに適しています。
1,000 個未満のタグが使用されるシナリオ。
データが頻繁に更新されないシナリオ。
データがワイドテーブルに格納されている場合、複数の列のフィルター条件に対する AND、OR、および NOT 操作は、列指向ストレージの最適化メカニズムによって自動的に処理されます。これは、結合操作よりも効率的です。さらに、Hologres は列指向ストレージをサポートしているため、I/O 操作の増加を防ぎます。このソリューションでは、従来のデータベースモデリングおよび開発アプリケーションを使用できます。
使用例
次の例では、プロファイル分析にワイドテーブルを使用します。SQL ステートメントを実行して、[性別 = 男性]
dws_userbase テーブルで、既婚の浙江省 (CREATE TABLEを作成する) の男性 ([province = Zhejiang]) をクエリします。クエリのパフォーマンスを向上させるには、クエリモードに基づいてテーブルに適切なインデックスを設定することをお勧めします。詳細については、「」をご参照ください。
-- ワイドテーブル。
BEGIN;
CREATE TABLE dws_userbase
(
uid text not null primary key,
province text,
gender text,
married text
... -- その他のプロパティ列。
);
call set_table_property('dws_userbase', 'distribution_key', 'uid');
call set_table_property('dws_userbase', 'bitmap_columns', 'province,gender,married');
END;
-- 基本プロパティに基づくクエリ。
SELECT count(distinct uid) as cnt,
married
FROM dws_userbase ub
WHERE province = 'Zhejiang' and gender = 'Male'
GROUP BY married;