zoukankan      html  css  js  c++  java
  • 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
    在这里插入图片描述

  • 相关阅读:
    Linux下的输入/输出重定向
    strcpy与strncpy的区别
    C++的函数重载
    gtest 学习二
    gtest 学习一
    char* wchar* char wchar转换
    iconv 编译不通过问题
    嵌入式常用库
    驱动编程class_create说明
    libiconv 交叉编译
  • 原文地址:https://www.cnblogs.com/baierfa/p/13458759.html
Copyright © 2011-2022 走看看