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