本文為您介紹在Hologres中如何通過寬表實現標簽計算的最佳實踐。
背景信息
離線數倉模型中,用戶標簽數據被分隔成面向主題、維度的多張表,這樣的組織形式便于體系化的構建標簽系統及數據維護管理。在線畫像分析服務如果按照這樣的數據模型組織標簽數據,不可避免的需要Join多張標簽表來完成多標簽的過濾,這對于數據庫產品開銷太大。
方案介紹
Hologres標簽寬表的方案是指將相對穩定的屬性表離線聚合成寬表,將多張表的關聯操作轉化成對一張表的計算,新的標簽列的場景可以通過增加列的方式實現,如下圖所示。這種方案適用于以下場景:
標簽數量較少(小于1000)。
數據穩定(更新較少)。
將數據存在寬表中,多列之間過濾條件的與或非運算將被列存的優化機制自動處理,相比任何Join方式都要更加高效;另一方面,Hologres支持列式存儲,不會產生IO放大的問題。使用寬表方案可沿用傳統數據庫模型建模和開發應用。
使用示例
使用標簽寬表進行畫像分析的示例如下,進行洞察dws_userbase表中[省份='浙江'] & [性別=男性]
在已婚狀態上的統計分析,示例SQL如下。建議根據查詢方式對表設置合理的索引,以提升查詢性能,詳情請參見CREATE TABLE。
-- 屬性數據寬表
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 = '浙江' and gender = '男'
GROUP BY married;
文檔內容是否對您有幫助?