oneid与用户标签之间的相互打通 实现用户画像打标行为
附录说明:整个流程:1、使用数据源数据进行数据清理(整理出关联数据与将要打标的数据值)2、将关联键值与oneid对应关联起来 并整理好将要打标值的外部关联格式化3、数据打标形成格式4、数据输入中间表 目的是汇总多个源产生的数据标签方便下一步汇总使用5、创建hive最终结果表6、对应创建es表建立映射关系7、从中间表读取数据进行汇总8、数据结果输入到建立映射的hive表中在es中查询辛苦码字如有转载请标明出处谢谢!——拜耳法参考链接附录说明:
打个标签盯住他
实现完整的用户标签需要以完整的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)均可
–数据插入中间表 处理出每条数据的唯一ID和对应ID身份 以及每个打标职位
insert into lable.dws_oneid_hq_app_lableselectnull 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_mappingfrom(--关联键值用作与字典表对接使用selectuser_id,uni,id_mappingfrom(--选出每个id对应的最大数值用于去重selectuser_id,CONCAT_WS('&&',max(vsex),max(VMARRIGE)) AS valu,id_mappingfrom(--数据格式化处理 与对接外部值关联选择select case when length(VMOBILE)=11 then VMOBILEwhen length(VLKMOBILE)=11 then VLKMOBILEwhen length(VCERTIFICATENO) is not null then VCERTIFICATENOelse null end ss,casewhen 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 VMARRIGEfrom ods_tds_ddc_sqoop.crmc01c)souleft join ( --使用行转列的方式 将oneid转换成对应多行selectuser_id,id_mapping,split(unio,'#&')[1] AS confrom oneid_data.oneid_data_sink_id_mapping lateral view explode(split(id_mapping, ','))tt as unio where dt='${dt}' ) oneidon sou.ss=oneid.con where sou.ss is not null and oneid.user_id is not nullgroup 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/mons.httpclient.jar;insert into lable.tdm_oneid_hq_app_lableselectmax(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
辛苦码字如有转载请标明出处谢谢!——拜耳法
都看到这里了非常感谢!
本片章暂未完结 有疑问请+vx :baierfa
参考链接
链接: 用户标签(一):图计算实现ID_Mapping、Oneid打通数据孤岛.
链接: 用户标签(二):增量版ID_Mapping、Oneid图计算打通数据孤岛实现.
链接: 用户标签(三):oneid与用户标签之间的相互打通 实现用户标签.
链接: 用户标签(四):MD5代替Hashcode生成唯一数字编码.