oneid与用户标签之间的相互打通 实现用户画像打标行为
附录说明:
打个标签盯住他
实现完整的用户标签需要以完整的oneid生成且oneid定时更新新增用户 才可以实现
整个流程:
所用组件 hive-》es(与hive产生映射的表)
数据处理流程
1、使用数据源数据进行数据清理(整理出关联数据与将要打标的数据值)
ods_tds_ddc_sqoop.crmc01c样例数据
2、将关联键值与oneid对应关联起来 并整理好将要打标值的外部关联格式化
oneid_data.oneid_data_sink_id_mapping数据样式
lable.lable_new_dict标签字典样例数据
3、数据打标形成格式
(oneid label1)
(oneid label2)
(oneid label3)
的格式也可以(oneid label1,label2,label3)均可
- 1
- 2
- 3
- 4
–数据插入中间表 处理出每条数据的唯一ID和对应ID身份 以及每个打标职位
insert into lable.dws_oneid_hq_app_lable
select
null AS user_name
,user_id
,null AS user_mobile
,null AS user_birthday
,null AS user_registime
,null AS user_lastlogintime
,null AS user_address
,label_code
,uni
,label_name
,id_mapping
from
(--关联键值用作与字典表对接使用
select
user_id
,uni
,id_mapping
from
(--选出每个id对应的最大数值用于去重
select
user_id
,CONCAT_WS('&&',max(vsex),max(VMARRIGE)) AS valu
,id_mapping
from
(
--数据格式化处理 与对接外部值关联选择
select
case
when length(VMOBILE)=11 then VMOBILE
when length(VLKMOBILE)=11 then VLKMOBILE
when length(VCERTIFICATENO) is not null then VCERTIFICATENO
else null end ss
,case
when vsex="0" then "男"
when vsex="1" then "女"
else "性别_其他" end vsex
,CASE
WHEN VMARRIGE ='01' or VMARRIGE ='已婚' THEN '已婚'
WHEN VMARRIGE ='02' or VMARRIGE ='未婚' THEN '未婚'
ELSE '婚姻_其他' END VMARRIGE
from
ods_tds_ddc_sqoop.crmc01c
)sou
left join
( --使用行转列的方式 将oneid转换成对应多行
select
user_id
,id_mapping
,split(unio,'#&')[1] AS con
from
oneid_data.oneid_data_sink_id_mapping lateral view explode(split(id_mapping, ','))tt as unio
where
dt='${dt}'
) oneid
on sou.ss=oneid.con
where sou.ss is not null
and oneid.user_id is not null
group by user_id,id_mapping
) tt lateral view explode(split(valu, '&&'))tt as uni
) etl
left join
(select label_name_data,label_code,label_name from lable.lable_new_dict where label_name_data is not null )
dict
on etl.uni=dict.label_name_data;
4、数据输入中间表 目的是汇总多个源产生的数据标签方便下一步汇总使用
HIVE建表语句:
dws_oneid_hq_app_lable(中间层建表)
CREATE TABLE `lable.dws_oneid_hq_app_lable`(
user_name String COMMENT '用户名称',
user_id String COMMENT '用户id',
user_mobile String COMMENT '用户手机号',
user_birthday String COMMENT '用户生日',
user_registime String COMMENT '用户注册时间',
user_lastlogintime String COMMENT '用户最后登录时间',
user_address String COMMENT '用户地址',
lable String COMMENT '标签',
label_name String COMMENT '标签名称',
label_name_data String COMMENT '数据标签名称',
id_mapping String COMMENT '用户身份集合'
)
COMMENT 'oneid打通标签数据汇总第一步中间表';
5、创建hive最终结果表
--结果表对应 es的表创建
tdm_oneid_hq_app_lable(对应es表标签汇总表)
add jar hdfs:///user/es_hadoop/elasticsearch-hadoop-7.3.2.jar;
CREATE EXTERNAL TABLE `lable.tdm_oneid_hq_app_lable`(
user_name String COMMENT '用户名称',
user_id String COMMENT '用户id',
user_mobile String COMMENT '用户手机号',
user_birthday String COMMENT '用户生日',
user_registime String COMMENT '用户注册时间',
user_lastlogintime String COMMENT '用户最后登录时间',
user_address String COMMENT '用户地址',
lable String COMMENT '标签',
id_mapping String COMMENT '用户身份集合'
)
COMMENT '标签数据汇总'
STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler'
TBLPROPERTIES (
'es.resource' = 'tdm_oneid_hq_app_lable',
'es.nodes'='prod.dbaas.private',
'es.port'='19204',
'es.mapping.id' = 'user_id',
'es.write.operation'='upsert',
'es.mapping.names'='user_name:user_name,user_id:user_id,user_mobile:user_mobile
,user_birthday:user_birthday,user_registime:user_registime,user_lastlogintime:user_lastlogintime
,user_address:user_address,lable:lable,id_mapping:id_mapping'
)
6、对应创建es表建立映射关系
部分因为业务需求需要创建成分词形式以便于后期查询使用
ES建表语句
PUT tdm_oneid_hq_app_lable/?include_type_name=true
{
"mappings":{
"_doc":{
"properties":{
"user_name":{
"type":"keyword"
},
"user_id":{
"type":"keyword"
},
"user_mobile":{
"type":"keyword"
},
"user_birthday":{
"type":"keyword"
},
"user_registime":{
"type":"keyword"
},
"user_lastlogintime":{
"type":"keyword"
},
"user_address":{
"type":"keyword"
},
"lable":{
"type":"text",
"analyzer": "standard"
},
"id_mapping":{
"type":"text",
"analyzer": "standard"
}
}
}
}
}
7、从中间表读取数据进行汇总
add jar hdfs:///user/es_hadoop/elasticsearch-hadoop-7.3.2.jar;
add jar hdfs:///user/es_hadoop/httpclient-4.5.5.jar;
add jar hdfs:///user/es_hadoop/org.apache.commons.httpclient.jar;
insert into lable.tdm_oneid_hq_app_lable
select
max(user_name) -- '用户名称',
,max(user_id) -- '用户id',
,max(user_mobile) -- '用户手机号',
,max(user_birthday) -- '用户生日',
,max(user_registime) -- '用户注册时间',
,max(user_lastlogintime) -- '用户最后登录时间',
,max(user_address) -- '用户地址',
,CONCAT_WS(',',collect_set(lable))
,id_mapping -- '用户身份集合'
from lable.dws_oneid_hq_app_lable
group by
user_id -- '用户id',
,id_mapping -- '用户身份集合'
8、数据结果输入到建立映射的hive表中在es中查询
GET tdm_oneid_hq_app_lable/_search
- 1
辛苦码字如有转载请标明出处谢谢!——拜耳法
都看到这里了非常感谢!
本片章暂未完结 有疑问请+vx :baierfa