基于clickhouse做用户画像,标签圈选

简介: 基于clickhouse做用户画像,标签圈选

clickhouse在做用户画像标签时,怎么去做圈选,表结构应该是怎么样的,我们应该怎么去处理,能够使其高性能的圈选,尽可能缩小其占用的存储空间?

这个问题,我通过代码给大家做下的演示

先在hive中对数据预处理

--最初表结构

create table f_tag_table(
    tag Int,
    tag_name String,
    cust_num String
);

image.gif

--插入数据

INSERT INTO f_tag_table values
                             (1001, '存款客户', '1,2,3'),
                             (2001,'国债客户', '2,3,4'),
                             (3001,'卡黑名单客户', '2,4'),
                             (4001,'短信黑名单', '3,4');

image.gif

现在的表是这样的:

tag tag_name cust_num
1001 存款客户 1,2,3
2001 国债客户 2,3,4
3001 卡黑名单客户 2,4
4001 短信黑名单 3,4

重新建一张表

create table usr_table(
  id int,
  tag_name varchar(30),
  tag int
);

image.gif

把表f_tag_table的数据插入进去

insert into usr_table
select usr, tag_name, tag from f_tag_table 
lateral view explode(split(cust_num, ',')) tmp as usr;

image.gif

现在的表结构如下

usr tag_name tag
1 存款客户 1001
2 存款客户 1001
3 存款客户 1001
2 国债客户 2001
3 国债客户 2001
4 国债客户 2001
2 卡黑名单客户 3001
4 卡黑名单客户 3001
3 短信黑名单 4001
4 短信黑名单 4001

--写入到文件中

./hive -e "
select
*
from ck.usr_table
" | tr "\t" "," > /fileName.csv

image.gif

--在clickhouse中建库建表

create database ck;
use ck;
create table usr_table(
  id UInt32,
  tag_name String,
  tag UInt32
)ENGINE = MergeTree()
ORDER BY id;

image.gif

--写入到CK中

clickhouse-client -m -u default -h 192.168.88.161 
--query 'INSERT INTO ck.usr_table FORMAT CSV' < /fileName.csv

image.gif

-- 存储表结构

create table tag_table(
  tag UInt32,
  tag_name String,
  cust_num AggregateFunction(groupBitmap, UInt64 )
)ENGINE = AggregatingMergeTree()
ORDER BY (tag, tag_name)
SETTINGS index_granularity = 128;
insert into tag_table
select
        tag,
       tag_name,
       groupBitmapState(toUInt64(id)) as cust_num
from usr_table group by tag,tag_name;

image.gif

--查询表

select tag, tag_name, bitmapToArray(cust_num) from tag_table;

image.gif

现在表是这样的:

tag tag_name cust_num
1001 存款客户 [1,2,3]
2001 国债客户 [2,3,4]
3001 卡黑名单客户 [2,4]
4001 短信黑名单 [3,4]

用bitmap进行圈选

WITH
  (
  SELECT cust_num from tag_table where tag ='1001'
  ) AS tag1,
  (
  SELECT cust_num from tag_table where tag ='2001'
  ) AS tag2,
  (
  SELECT cust_num from tag_table where tag ='3001'
  ) AS tag3,
  (
  SELECT cust_num from tag_table where tag ='4001'
  ) AS tag4
select bitmapToArray(bitmapAndnot(bitmapOr(tag1, tag2),bitmapOr(tag3, tag4))) 
as customer;

image.gif

至此你已经完成了对用户标签的圈选

目录
相关文章
|
6月前
|
存储 搜索推荐 关系型数据库
用户画像系列——HBase 在画像标签过期策略中的应用
用户画像系列——HBase 在画像标签过期策略中的应用
130 0
|
6月前
|
存储 分布式计算 MaxCompute
Hologres RoaringBitmap实践:千亿级画像数据秒级分析
Hologres RoaringBitmap实践:千亿级画像数据秒级分析
804 2
|
6月前
|
搜索推荐
用户画像系列文章
用户画像系列文章
76 0
|
数据采集 搜索推荐 算法
151 用户画像
151 用户画像
309 0
|
存储 分布式计算 MaxCompute
Hologres RoaringBitmap实践,千亿级画像数据秒级分析
本文将会分享Hologres RoaringBitmap 方案在画像分析的应用实践,实现更快更准的画像分析。
|
搜索推荐 关系型数据库 数据库
沉浸式学习PostgreSQL|PolarDB 3: 营销场景, 根据用户画像的相似度进行目标人群圈选, 实现精准营销
业务场景1 介绍: 营销场景, 根据用户画像的相似度进行目标人群圈选, 实现精准营销 在营销场景中, 通常会对用户的属性、行为等数据进行统计分析, 生成用户的标签, 也就是常说的用户画像. 标签举例: 男性、女性、年轻人、大学生、90后、司机、白领、健身达人、博士、技术达人、科技产品爱好者、2胎妈妈、老师、浙江省、15天内逛过手机电商店铺、... ... 有了用户画像, 在营销场景中一个重要的营销手段是根据条件选中目标人群, 进行精准营销. 例如圈选出包含这些标签的人群: 白领、科技产品爱好者、浙江省、技术达人、15天内逛过手机电商店铺 .
313 0
|
存储 SQL 缓存
多标签用户画像分析跑得快的关键在哪里?
多标签用户画像分析跑得快的关键在哪里?
174 0
|
搜索推荐 OLAP
Clickhouse在画像场景如何对人群分布情况进行N等分
Clickhouse是一个性能强悍的OLAP系统,经常被用于用户画像等场景。 在画像场景中,经常需要按照某一指标对人群进行N等分,然后对每个人根据指标所处的范围打上对应标签。 本文主要介绍如何通过Clickhouse对人群分布情况进行N等分。
453 0
Clickhouse在画像场景如何对人群分布情况进行N等分
|
存储 SQL 消息中间件
基于 MaxCompute + Hologres 的人群圈选和数据服务实践
本文主要介绍如何通过 MaxCompute 进行海量人群的标签加工,通过 Hologres 进行分析建模,从而支持大规模人群复杂圈选场景下的交互式体验,以及基于API的数据服务最佳实践。
1851 1
基于 MaxCompute + Hologres 的人群圈选和数据服务实践
|
存储 SQL 消息中间件
基于MaxCompute+Hologres的人群圈选和数据服务实践
基于MaxCompute+Hologres的人群圈选和数据服务实践
1606 0
基于MaxCompute+Hologres的人群圈选和数据服务实践
下一篇
无影云桌面