《基于Hive数据仓库的标签画像实战.docx》由会员分享,可在线阅读,更多相关《基于Hive数据仓库的标签画像实战.docx(12页珍藏版)》请在第一文库网上搜索。
1、基于Hive数据仓库的标签画像实战导读:本期内容主要介绍使用Hive作为数据仓库的应用场景时,相应的库表结构如何设计。Hive数据仓库建立用户画像首先需要建立数据仓库,用于存储用户标签数据。Hive是基于Hadoop的数据仓库工具,依赖于HDFS存储数据,提供的SQL语言可以查询存储在HDFS中的数据。开发时一般使用Hive作为数据仓库,存储标签和用户特征库等相关数据。”数据仓库之父” W.H.Inmon在Building the Data Warehouse(中文版数据仓库(原书第4版)一书中定义数据仓库是“一个面向主题的、集成的、非易失的、随时间变化的、用来支持管理人员决策的数据集合”。广
2、告数据仓库(原书第4版)作者:美William H.Inmon京东购买面向上题:业务数据库中的数据主:要针对事务处理,各个业务系统之间是相互分离的,而数据仓库中的数据是按照一定主题进行组织的。集成:数据仓库中存储的数据是从业务数据库中提取出来的,但并不是对原有数据的简单复制,而是经过了抽取、清理、转换(ETL)等工作。业务数据库记录的是每一项业务处理的流水账。这些数据不适合进行分析处理,进入数据仓库之前需要经过一系列计算,同时抛弃一些无关分析处理的数据。非易失:业务数据库中一般只存储短期数据,因此其数据是不稳定的,记录的是系统中数据变化的瞬态。数据仓库中的数据大多表示过去某一时刻的数据,主要用
3、于查询、分析,不像业务系统中的数据库一样经常修改,一般数据仓库构建完成后主要用于访问,不进行修改和删除。随时间变化:数据仓库关注的是历史数据,按时间顺序定期从业务库和日志库里面载入新的数据进行追加,带有时间属性。数据抽取到数据仓库的流程如下图所示。日电理点8?如在数据仓库建模的过程中,主要涉及事实表和维度表的建模开发:事实表主要围绕业务过程设计,就应用场景来看主要包括事务事实表,周期快照事实表和累计快照事实表:事务事实表:用于描述业务过程,按业务过程的单一性或多业务过程可进一步分为单事务事实表和多事务事实表。其中单事务事实表分别记录每个业务过程,如下单业务记入下单事实表,支付业务记入支付事实表
4、。多事务事实表在同一个表中包含了不同业务过程,如下单、支付、签收等业务过程记录在一张表中,通过新增字段来判断属于哪一个业务过程。当不同业务过程有着相似性时可考虑将多业务过程放到多事务事实表中。周期快照事实表:在一个确定的时间间隔内对业务状态进行度量。例如查看一个用户的近1年付款金额、近1年购物次数、近3()日登录天数等。累计快照事实表:用于查看不同事件之间的时间间隔,例如分析用户从购买到支付的时长、从下单到订单完结的时长等。一般适用于有明确时间周期的业务过程。数据仓库建模事实表维度表单事务事实表事务事实表0/: 多事务事实表周期快照事实表累计快照事实表e缓慢变化维维度表主要用于对事实属性的各个
5、方面描述,例如,商品维度包括商品的价格、折扣、品牌、原厂家、型号等方面信息。维度表开发的过程中,经常会遇到维度缓慢变化的情况,对于缓慢变化维一般会采用:重写维度值,对历史数据进行覆盖;保留多条记录,通过插入维度列字段加以区分;开发日期分区表,每日分区数据记录当日维度的属性;开发拉链表按时间变化进行全量存储等方式进行处理。在画像系统中主要使用Hive作为数据仓库,开发相应的维度表和事实表来存储标签、人群、应用到服务层的相关数据。分区存储如果将用户标签开发成一张大的宽表,在这张宽表下放几十种类型标签,那么每天该画像宽表的ETL作业将会花费很长时间,而且不便于向这张宽表中新增标签类型。要解决这种ET
6、L花费时间较长的问题,可以从以下几个方面着手:将数据分区存储,分别执行作业;标签脚本性能调优;基于一些标签共同的数据来源开发中间表。下面介绍一种用户标签分表、分区存储的解决方案。根据标签指标体系的人口属性、行为属性、用户消费、风险控制、社交属性等维度分别建立对应的标签表进行分表存储对应的标签数据。如下图所示。人口属性表:dw.userprofile_attritube_all行为属性表:dw.userprofile_action_all用户消费表:dw.userprofile_consume_all风险控制表:dw.userprofile_riskmanage_all社交属性表:dw.user
7、profile_social_all用户标签的ETLdw.userprofileactionalldw.userprofilcriskmanagcall例如创建用户的人口属性宽表:字段字段定义示例备注userid用户id44463729用户没被打上该标签.数值为0.如果仃勘定数值的该段打储乓体数值(如件龄标越存放艮体年龄),如果没有具体数值则放数俏1 (如性别标签存储1)ATTRITLBE; U 01 001刃性1ATTR1TLBE U 01 002女性0ATTRITLBEU 02 OOI高活跃用户1ATTRITCBE U 02 002中等活欧用户0字段字段定义示例备注ATTR1TUBE U
8、02 003非活跃川户0ATTRITUBE U 03 001年龄28ATTRITUBE U 04 001币:要价值(RFM价制度)0ATTRITUBE U 04 002币:要发展(RFM价制度)0ATTRITUBE U 04 003币:要保持(RFM价制度)0ATTRITUBE U 04 004币:要挽留(RFM价制度)i data date日期20190101数据分区日削同样的,用户其他id维度(如cookieid deviceid、registerid等)的标签数据存储,也可以使用上面案例中的表结构。在上面的创建中通过设立人口属性维度的宽表开发相关的用户标签,为了提高数据的插入和查询效率,
9、在Hive中可以使用分区表的方式,将数据存储在不同的目录中。在Hive使用select查询时一般会扫描整个表中所有数据,将会花费很多时间扫描不是当前要查询的数据,为了扫描表中关心的一部分数据,在建表时引入了 partition的概念。在查询时,可以通过Hive的分区机制来控制一次遍历的数据量。标签汇聚在上面一节提到的案例中,用户的每个标签都插入到相应的分区下面,但是对一个用户来说,打在他身上的全部标签存储在不同的分区下面。为了方便分析和查询,需要将用户身上的标签做聚合处理。标签汇聚后将一个每个用户身上的全量标签汇聚到一个字段中,表结构设计如下:CREATE TABLE dw.userprofi
10、le_uselabel_map_a11,userid string COMMENT useridJ|、us er labels、map string, stringCOMMENT COMMENT Userid ”一;PARTITIONED BY ( data_date string COMMENT,数据日期1 )userid对用户身上标签聚合通过ud福数对存储用户标签的各个表中:的谟合444637254G1922C201CW29545979791凭16511rEB.jQ2.00r:2JkKSJJ.02W:12JCSRSaejJ.W.Wr:ami旦应JJO1:丁,ricnas v 02 5mt8
11、,.bsmTfof(20:iu jMnor uCRlS2ftx U 04 :1:2 JATOKIBE U 02 2-:e52*/COSS2e J 03 004(ncn0L:i .:3 :2 ?)2B:*2eRISJWVA2 3 的”:)用户标签的ETL对用户标签分表分区存储人口属住表行为属住表用户消费表风险控制表.Idw.userprofile attritube alldw.userprofile consume all dw.userprofile action alldw.userprofile riskmanage all开发udf函数“cast_toson”将用户身上的标签汇聚成js
12、on字符串,执行命令将按分区存储的标签进行汇聚:insert overwrite table dw,userprofile_userlabel_map_all partition(data_date=cast_to_json(concat_ws(J,collect_set(concat(labelid:labelweighII.: i dcN;_dcto 汇聚后用户标签的存储格式如图所示:useriduserlabelsdata_date444637294069220201010295459797919816511(FCTION_U_02_001- :JACTION_U_02_002:JCON
13、SUME_U_08_004(RCONSUJffi_5_02_001:w7wf -ACTIONOOOa-: w12wf RISKMANAGE_U_08_004-ACTION亘62soi : WCONSUME 二U二02二002: 212, ACTION-U_OS2OOZ : 23)(-RISKMANAGE_U_04_001- : 2, ATTRITUBE_U_02_002 : 82, CONSUIffi_U_08_004 :)(ACTION U 05 001:5,CONSUME U 02 002:2rRISKMANAGE U 08 004:!201901012019010120190101201
14、9010120190101将用户身上的标签进行聚合便于查询和计算。例如,在画像产品中,输入用户id后通过直接查询该表,解析标签id和对应的标签权重后,即可在前端展示该用户的相关信息ID-MAP开发用户标签的时候,有项非常重要的内容ID-MApping,即把用户不同来源的身份标识通过数据手段识别为同一个主体。用户的属性、行为相关数据分散在不同的数据来源中,通过ID-MApping能够把用户在不同场景下的行为串联起来,消除数据孤岛。下图展示了用户与设备间的多对多关系。II 1川户A用户Brxna a设备A设备B下图展示了同一用户在不同平台间的行为示意图。手机padPC举例来说,用户在未登录App的状态下,在App站内访问、搜索相关内容时,记录的是设备id (即cookieid)相关的行为数据。而用户在登录App后,访问、收藏、下单等相关的行为记录的是账号id (即userid)相关行为数据。虽然是同一个用户,但其在登录和未登录设备时记录的行为数据之间是未打通的。通过ID-MApping打通userid和cookieid的对应关系,可以在用户登录、未登录设备时都能捕获其行为轨迹。