用户画像 您所在的位置:网站首页 用户画像标签分类 用户画像

用户画像

2023-01-13 22:06| 来源: 网络整理| 查看: 265

持之以恒,贵在坚持,每天进步一点点!

前言

        上一篇文章已经为大家介绍了 Hive 在用户画像的标签数据存储中的具体应用场景,本篇我们来谈谈MySQL的使用!

用户画像 | 标签数据存储之MySQL真实应用_其它

- 赵宏田

        MySQL作为关系型数据库,在用户画像中可用于元数据管理、监控预警数据、结果集存储等应用中。下面详细介绍这3个应用场景。

元数据管理

        Hive适合于大数据量的批处理作业,对于量级较小的数据,MySQL具有更快的读写速度。Web端产品读写MySQL数据库会有更快的速度,方便标签的定义、管理。

        在介绍用户画像产品化的时候,我们会介绍元数据录入和查询功能,将相应的数据存储在MySQL中。用户标签的元数据表结构设计也会在之后进行详细的介绍。这里给出了平台标签视图和元数据管理页面。

用户画像 | 标签数据存储之MySQL真实应用_数据_02

用户画像 | 标签数据存储之MySQL真实应用_mysql_03

        平台标签视图中的标签元数据可以维护在MySQL关系数据库中,便于标签的编辑、查询和管理。

监控预警数据

        MySQL还可用于存储每天对ETL结果的监控信息。从整个画像调度流的关键节点来看,需要监控的环节主要包括对每天标签的产出量、服务层数据同步情况的监控等主要场景。下图展示的是用户画像调度流主要模块。

用户画像 | 标签数据存储之MySQL真实应用_其它_04

1.标签计算数据监控

        主要用于监控每天标签ETL的数据量是否出现异常,如果有异常情况则发出告警邮件,同时暂停后面的ETL任务。

2. 服务层同步数据监控

        服务层一般采用​​HBase​​​、​​Elasticsearch​​等作为数据库存储标签数据供线上调用,将标签相关数据从Hive数仓向服务层同步的过程中,有出现差错的可能,因此需要记录相关数据在Hive中的数量及同步到对应服务层后的数量,如果数量不一致则触发告警。

        在对画像的数据监控中,调度流每跑完相应的模块,就将该模块的监控数据插入MySQL中,当校验任务判断达到触发告警阈值时,发送告警邮件,同时中断后续的调度任务。待开发人员解决问题后,可重启后续调度。

3. 结果集存储

        结果集可以用来存储多维透视分析用的标签、圈人服务用的用户标签、当日记录各标签数量,用于校验标签数据是否出现异常。

        有的线上业务系统使用MySQL、Oracle等关系型数据库存储数据,如短信系统、消息推送系统等。在打通画像数据与线上业务系统时,需要考虑将存储在Hive中的用户标签相关数据同步到各业务系统,此时MySQL可用于存储结果集。

        Sqoop是一个用来将Hadoop和关系型数据库中的数据相互迁移的工具。它可以将一个关系型数据库(如MySQL、Oracle、PostgreSQL等)中的数据导入Hadoop的HDFS中,也可以将HDFS中的数据导入关系型数据库中​

        下面通过一个案例来讲解如何使用Sqoop将Hive中的标签数据迁移到MySQL中。

        电商、保险、金融等公司的客服部门的日常工作内容之一是对目标用户群(如已流失用户、高价值用户等)进行主动外呼,以此召回用户来平台进行购买或复购。这里可以借助用户画像系统实现该功能。

        将Hive中存储的与用户身份相关的数据同步到客服系统中,首先在Hive中建立一张记录用户身份相关信息的表(例如​​dw.userprofile_userservice_all​​)。设置日期分区以满足按日期选取当前人群的需要。

CREATE TABLE `dw.userprofile_userservice_all `(`user_id` string COMMENT 'userid', `user_sex` string COMMENT 'user_sex', `city` string COMMENT 'city',`payid_money` string COMMENT 'payid_money', `payid_num` string COMMENT 'payid_num', `latest_product` string COMMENT 'latest_product', `date` string COMMENT 'date', `data_status` string COMMENT 'data_status')COMMENT 'userid 用户客服数据'PARTITIONED BY ( `data_date` string COMMENT '数据日期')

        在MySQL中建立一张用于接收同步数据的表(​​userservice_data​​)。

CREATE TABLE `userservice_data` ( `user_id` varchar(128) DEFAULT NULL COMMENT '用户id', `user_sex` varchar(128) NOT NULL COMMENT '用户性别', `city` varchar(128) DEFAULT NULL COMMENT '城市', `payid_money` varchar(128) DEFAULT NULL COMMENT '消费金额', `payid_num` varchar(128) DEFAULT NULL COMMENT '消费次数', `latest_product` varchar(128) DEFAULT NULL COMMENT '最近购买产品', `date` varchar(64) NOT NULL COMMENT '传输日期', `data_status` varchar(64) DEFAULT '0' COMMENT '0:未传输,1:传输中,2:成功,3:失败', PRIMARY KEY (`user_id`),) ENGINE=InnoDB AUTO_INCREMENT=2261628 DEFAULT CHARSET=utf8 COMMENT='用户客服数据表';

        通过Python脚本调用shell命令,将Hive中的数据同步到MySQL中。执行如下脚本:

# -*- coding: utf-8 -*-import osimport MySQLdbimport sysdef export_data(hive_tab, data_date): sqoop_command = "sqoop export --connect jdbc:mysql://10.xxx.xxx.xxx:3306/mysql_database --username username --password password --table mysql_table --export-dir hdfs://nameservice1/user/hive/warehouse/dw.db/" + hive_tab + "/data_date=" + data_date + " --input-fields-terminated-by '\001'" os.system(sqoop_command) print(sqoop_command)

if __name__ == '__main__': export_data("dw.userprofile_userservice_all", '20181201')

        其中用到了 sqoop 从 Hive 导出数据到 MySQL 的命令:

sqoop export--connect 指定JDBC连接字符串,包括IP 端口 数据库名称 \--username JDBC连接的用户名\--passowrd JDBC连接的密码\--table 表名\--export-dir 导出的Hive表, 对应的是HDFS地址 \--input fileds-terminated-by ‘,’ 分隔符号

        不熟悉Sqoop使用的小伙伴可以去看我的这篇文章​​《硬核 | Sqoop入门指南》​​, 介绍的非常详细!

        同步后 MySQL中的数据如图所示

用户画像 | 标签数据存储之MySQL真实应用_mysql_05

小结

        本篇文章主要介绍了在用户画像的业务场景下,MySQL存储相关数据的真实应用场景!后续会陆续为大家介绍 HBase和 Elasticsearch,敬请期待!

        对于该书有兴趣的同学,也可以点击下方链接进行购买,花几十块钱,学到大牛好几年的工作经验,想想都是稳赚不赔的事,当然,前提是自己得花时间去看,去思考,去实践,而不是成为标准的“收藏家”。

        好了,本篇文章就到这里,更多干货文章请关注下方我的公众号。你知道的越多,你不知道的也越多。我是Alice,我们下一期见!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有