全部產品
Search
文件中心

Hologres:Portrait analysis - 標籤寬表

更新時間:Dec 17, 2024

本文為您介紹在Hologres中如何通過寬表實現標籤計算的最佳實務。

背景資訊

離線數倉模型中,使用者標籤資料被分隔成面向主題、維度多張表,這樣的組織形式便於體系化的構建標籤系統及資料維護管理。線上Portrait analysis服務如果按照這樣的資料模型組織標籤資料,不可避免的需要Join多張標籤表來完成多標籤的過濾,這對於資料庫產品開銷太大。

方案介紹

Hologres標籤寬表的方案是指將相對穩定的屬性工作表離線彙總成寬表,將多張表的關聯操作轉化成對一張表的計算,新的標籤列的情境可以通過增加列的方式實現,如下圖所示。方案介紹這種方案適用於以下情境:

  • 標籤數量較少(小於1000)。

  • 資料穩定(更新較少)。

將資料存在寬表中,多列之間過濾條件的與或非運算將被列存的最佳化機制自動處理,相比任何Join方式都要更加高效;另一方面,Hologres支援列式儲存,不會產生IO放大的問題。使用寬表方案可沿用傳統資料庫模型建模和開發應用。

使用樣本

使用標籤寬表進行Portrait analysis的樣本如下,進行洞察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;