用戶畫像分析軟件 用戶畫像分析系統



文章插圖
用戶畫像分析軟件 用戶畫像分析系統

文章插圖
本文分享自華為云社區《基于MRS-ClickHouse構建用戶畫像系統方案介紹》,作者:hourongqi。
1. 業務場景
用戶畫像是對用戶信息的標簽化 。用戶畫像系統通過對收集的各維度數據,進行深度的分析和挖掘,給不同的用戶打上不同的標簽,從而刻畫出客戶的全貌 。通過用戶畫像系統,可以對各個用戶進行精準定位,從而將其應用于個性化推薦、精準營銷等業務場景中 。用戶畫像系統已經被各個企業廣泛采用,是大數據落地的重要方式之一 。
在移動互聯網時代,用戶數量龐大,標簽數量眾多,用戶標簽的數據量巨大 。用戶畫像系統中,對于標簽的存儲和查詢,不同的企業有不同的實現方案 。當前主流的實現方案采用ElasticSearch方案 。但基于ElasticSearch構建用戶畫像平臺,往往面臨靈活性不足、資源開銷大、無SQL接口開發不便等問題 。為此,本文提供了一種基于華為MRS ClickHouse構建用戶畫像系統的方法 。
2. 為什么基于MRS-ClickHouse構建標簽查詢系統2.1 MRS-ClickHouse簡介
MRS-ClickHouse是一款面向聯機分析處理的列式數據庫 。其最核心的特點是極致壓縮率和極速查詢性能 。MRS-ClickHouse支持SQL查詢,且查詢性能好,特別是基于大寬表的聚合分析查詢性能非常優異,比其他分析型數據庫速度快一個數量級 。
ClickHouse有如下特點:
完備的DBMS功能ClickHouse擁有完備的數據庫管理功能,具備一個DBMS基本的功能,包括DDL、DML、權限控制、數據備份與恢復、分布式管理 。列式存儲與數據壓縮ClickHouse是一款使用列式存儲的數據庫,數據按列進行組織,屬于同一列的數據會被保存在一起,列與列之間也會由不同的文件分別保存 。在執行數據查詢時,列式存儲可以減少數據掃描范圍和數據傳輸時的大小,提高了數據查詢的效率 。向量化執行引擎ClickHouse利用CPU的SIMD指令實現了向量化執行 。SIMD的全稱是Single Instruction Multiple Data,即用單條指令操作多條數據,通過數據并行以提高性能的一種實現方式,它的原理是在CPU寄存器層面實現數據的并行操作 。關系模型與SQL查詢ClickHouse完全使用SQL作為查詢語言,提供了標準協議的SQL查詢接口,使得現有的第三方分析可視化系統可以輕松與它集成對接 。同時ClickHouse使用了關系模型,所以將構建在傳統關系型數據庫或數據倉庫之上的系統遷移到ClickHouse的成本會變得更低 。數據分片與分布式查詢ClickHouse集群由1到多個分片組成,而每個分片則對應了ClickHouse的1個服務節點 。分片的數量上限取決于節點數量(1個分片只能對應1個服務節點) 。ClickHouse提供了本地表 (Local Table)與分布式表 (Distributed Table)的概念 。一張本地表等同于一份數據的分片 。而分布式表本身不存儲任何數據,它是本地表的訪問代理,其作用類似分庫中間件 。借助分布式表,能夠代理訪問多個數據分片,從而實現分布式查詢 。2.2 位圖索引介紹
位圖是一種通過數組下標與某些特定的值進行關聯的數據結構 。在位圖中,每一個元素占用1個比特位 。比特位為1時,表示對應的元素有該特定的值 。反之則表示沒有 。
舉例:
ID集合:[0,1,4,5,6,7,9,10,13,14]通過位圖可以表示為:11001111 01100110
如下圖所示:
位圖索引是一種使用位圖的特殊索引,主要針對大量相同值的列而創建 。位圖中位置編碼中的每一位表示對應的數據行的有無 。位圖索引適合固定值的列,如性別、婚姻狀況、行政區等等 。而不適合像身份證號、消費金額這種離散值的列 。用戶畫像場景中,每一個標簽,對應大量的人群 。標簽的數量是有限的枚舉值,這一特點非常適合位圖索引 。
舉例:
假設有兩個標簽,一個是標簽1-持有貴金屬,另一個是標簽2-持有保險 。各個持卡人擁有的標簽情況如下表所示 。
從中,我們可以看到,有標簽1-持有貴金屬的持卡人ID集合是:[0,1,4,5,6,7,9,10,13,14] 。有標簽2-持有保險的持卡人ID集群是:[2,3,5,7,8,11,12,13,15] 。
當我們需要查詢同時有這個標簽的用戶時,基于位圖索引,只需要將兩個標簽相應的位圖進行位運算,即可得到最終結果 。這樣,標簽數據的存儲空間占用非常小,標簽計算的速度非常快 。
2.3 MRS-ClickHouse原生支持位圖索引
在ClickHouse出現之前,如果要將位圖索引應用于用戶畫像場景,需要自己構建位圖數據結構、管理位圖索引,使用門檻較高 。好消息是,MRS-ClickHouse原生提供了對位圖數據結構和位置索引的支持,將位圖的構建及維護封裝在ClickHouse內部 。使用者基于ClickHouse構建位圖索引變成非常的簡單 。
ClickHouse位圖構造函數:
ClickHouse位置操作函數:
ClickHouse位圖運算結果獲取函數:
綜上,為什么是選擇基于ClickHouse構建標簽查詢系統?
ClickHouse查詢速度快,最快可達亞秒級響應;ClickHouse內置位圖數據結構,方便構建位圖索引,提升標簽查詢性能;基于JDBC/SQL接口,開發更簡單;基于MPP架構,可橫向擴展;3. 如何基于MRS-ClickHouse構建標簽查詢系統
在ClickHouse中創建一張原始標簽表,將原始標簽數據導入其中 。然后基于標簽原始表構建標簽位圖表,并創建對應的分布式表 。上層標簽查詢應用基于標簽位圖表(分布式表)進行標簽查詢 。
流程如下圖所示:
詳細過程如下文所述 。
Step 1:創建標簽原始表,導入標簽原始數據
首先,創建一張標簽原始表,保存標簽原始數據 。上游系統計算出的標簽結果數據,寫入本表中 。本表為本地表 。其建表語句如下:
CREATE TABLE IF NOT EXISTS tbl_tag_src ON CLUSTER default_cluster(tagname String,--標簽名稱tagvalue String,--標簽值userid UInt64 )ENGINE = ReplicatedMergeTree('/clickhouse/default/tables/{shard}/tbl_tag_src ','{replica}')PARTITION BY tagnameORDER BY tagvalue;然后創建分布式表:
CREATE TABLE IF NOT EXISTS default.tbl_tag_src_all ON CLUSTER default_cluster AS tbl_tag_src ENGINE = Distributed(default_cluster, default, tbl_tag_src, rand());數據預覽如下:
Step 2:創建標簽位圖表,構建標簽位圖
創建一張標簽位圖表,先創建本地表 。本地表用于保存標簽位圖數據 。其創建語句如下:
-- 創建位圖表,先創建本地表CREATE TABLE IF NOT EXISTS tbl_tag_bitmap ON CLUSTER default_cluster(tagname String,--標簽名稱tagvalue String,--標簽值tagbitmap AggregateFunction(groupBitmap, UInt64 )--userid集合)ENGINE = ReplicatedAggregatingMergeTree('/clickhouse/default/tables/{shard}/ tbl_tag_bitmap ','{replica}')PARTITION BY tagnameORDER BY (tagname, tagvalue)SETTINGS index_granularity = 128;然后再創建對應的分布式表 。分布式表用于上層應用查詢標簽 。其建表語句如下:
CREATE TABLE IF NOT EXISTS default.tbl_tag_bitmap_all ON CLUSTER default_cluster(tagname String,--標簽名稱tagvalue String,--標簽值tagbitmap AggregateFunction(groupBitmap, UInt64 )--userid集合)ENGINE = Distributed(default_cluster, default, tbl_tag_bitmap, rand());將標簽原始表的數據導入標簽位圖表中 。并在導入過程中,使用groupBitmapState()函數構建位圖 。SQL語句如下:
-- 導入數據, 將同一個標簽的所有userid使用groupBitmapState函數合并成一個bitmapINSERT INTO tbl_tag_bitmap_allSELECT tagname,tagvalue,groupBitmapState(userid)FROM tbl_tag_src_allGROUP BY tagname,tagvalue;【用戶畫像分析軟件 用戶畫像分析系統】Step 3:基于分布式表快速檢索標簽
查詢持有貴金屬產品,并且性別是男的userid列表:
WITH(SELECT tagbitmap FROM tbl_tag_bitmap_all WHERE tagname = '持有產品' AND tagvalue = 'http://www.mnbkw.com/jxjc/186747/貴金屬' LIMIT 1) AS bitmap1,(SELECT tagbitmap FROM tbl_tag_bitmap_all WHERE tagname = '性別' AND tagvalue = 'http://www.mnbkw.com/jxjc/186747/男' LIMIT 1) AS bitmap2SELECT bitmapToArray(bitmapAnd(bitmap1, bitmap2)) AS res分別統計持有保險的客戶中,男性和女性的總人數:
---- 查詢持有保險的客戶中,男性人數:WITH(SELECT tagbitmap FROM tbl_tag_bitmap_all WHERE tagname = '持有產品' AND tagvalue = 'http://www.mnbkw.com/jxjc/186747/保險' LIMIT 1) AS bitmap1,(SELECT tagbitmap FROM tbl_tag_bitmap_all WHERE tagname = '性別' AND tagvalue = 'http://www.mnbkw.com/jxjc/186747/男' LIMIT 1) AS bitmap2SELECT bitmapCardinality(bitmapAnd(bitmap1, bitmap2)) AS res---- 查詢持有保險的客戶中,女性人數:WITH(SELECT tagbitmap FROM tbl_tag_bitmap_all WHERE tagname = '持有產品' AND tagvalue = 'http://www.mnbkw.com/jxjc/186747/保險' LIMIT 1) AS bitmap1,(SELECT tagbitmap FROM tbl_tag_bitmap_all WHERE tagname = '性別' AND tagvalue = 'http://www.mnbkw.com/jxjc/186747/女' LIMIT 1) AS bitmap2SELECT bitmapCardinality(bitmapAnd(bitmap1, bitmap2)) AS res4.總結
針對用戶畫像場景中的海量標簽查詢,傳統的方案存在靈活性不足、資源消耗大、缺少SQL接口開發難度大等問題 ?;谌A為MRS-ClickHouse,可以非常方便的構建位圖索引,實現海量標簽數據的實時檢索 。MRS-ClickHouse讓開發成本大幅降低,標簽查詢更快響應,讓精準營銷更便捷 。
華為云FusionInsight MRS云原生數據湖已廣泛應用于政府、金融、運營商、大企業、互聯網等行業,攜手800+合作伙伴,服務于全球60+國家和地區3000+政企客戶 。