数据仓库项目

378 阅读9分钟

离线数据仓库

  • 服务器规模:服务器是用128G内存,20核物理cpu,40线程,8T HDD和2T的SSD的戴尔牌。一般物理机寿命5年左右。
  • 数据规模:每天有20多个G的数据,包括用户行为数据与业务数据的总和。业务数据要少于行为数据。保存三个副本每天60G,一台服务器就够了。
    • 如果数据量比较大可以采用LZO进行压缩。要为LZO创建索引
  • 人员配置:我是5-6个人。
  • 服务器个数:三台服务器
  • 服务的app:矿小助(课程表app),淘矿(二十交易平台),洗浴卡充值系统,电费查询,维修,签到,矿大文库(各类考试资料)。淘矿在大学城很流行。
  • 本人负责工作:采集数据,建立数据仓库。

指标系统

  • SKU:标识商品的唯一性
  • SPU:商品所有的信息的聚合,商品的型号,颜色,等。

电商业务表

  • 用户信息表
  • 用户地址表
  • 收藏表
  • 购物车表
  • 商品信息表
  • 订单表
  • 订单明细表
  • 退款表
  • 支付表
  • 评价表

全量表增量表

image.png

sqoop导入数据的时候MySQL 的控制是null,而hive是‘\N’,所以导出的时候用

  • --input null string
  • --input null non string

而导入的时候用

  • --null string
  • --null non string

数据仓库的理论

范式理论

  • 完全函数依赖:例如由(课程,学号)->分数,此时分数完全依赖学号与课程,就是有AB->C,A或者B单独都不能得出C。

  • 部分函数依赖:通过AB->C,可以A->C或者B->C

  • 传递函数依赖:A->B


  • 第一范式:属性不可切割
  • 第二范式:不能存在部分函数依赖
  • 第三范式:不能存在传递函数依赖

数据建模理论

关系建模:严格遵循第三范式,数据冗余度比较低,但是查询效率比较低。

维度建模:以数据分析为出发点,不遵循第三范式,数据虽然存在一定的冗余,但是维度模型面向业务,查询效率高。

维度表:例如用户,时间,商品,日期等;维度表范围很宽。例如时间维度表:

image.png

事实表:下单,支付,退款,评价


维度模型的分类

  • 星型模型:标准的星型模型只有一层。

  • 雪花模型:雪花模型与星型模型的区别只在于维度的层级,雪花模型有很多层级。雪花模型比较靠近第三范式,不存在传递依赖,但又无法遵循第三范式,因为代价太高。

  • 星座模型:星座模型与前面的区别就是事实表的数量,星座模型基于多个事实表。

星型+星座

数据仓库的分层

  • ods层:原始的业务数据与用户行为数据。

  • dwd层:以业务为驱动,星型模型+星座模型,维度为一层,多个事实表。将用户行为数据进行解析,对业务数据采用维度模型进行建模。将页面日志与启动日志细分为:启动日志表,页面日志表,动作日志表,曝光日志表,错误日志表。UDTF过程如下所示:

    • UDTF:获取json数组,重写initialize(),process(),close()方法
    • 将函数打包成jar包,传到HDFS上
    • 创建永久函数与开发好的包做关联
    • 写入hive 语句就可
    • --------业务数据---------------------------------
    • 建立评价事实表,订单明细事实表,退单表,加购事实表,收藏事实表 ,退单事实表。
  • dim层:商品维度表,时间维度表,用户维度表。

    • 拉链表:每条信息的开始日期和结束日期,针对数据会发生变化,但是变化频率不高的维度,例如用户的信息,如果使用每日全量数据的方式保存效率较低,这时就会使用拉链表。
    • 通过拉链数据可以得到某个时间的全量数据切片

image.png image.png

image.png

制作拉链表的过程:首先根据用户全量表创建初始的拉链表,开始日期是数据仓库第一天的日期,结束时间是无限的,当用户全量表发生了变化,例如用户状态发生了更改,或者有新的用户增加,会根据用户表的创建时间和操作时间,得到用户变化表,用户变化表与之前的拉链表合并得到拉链表。

首先创建一个拉链表,首日装载进行初始化的时候将所有用户一次性导入到拉链表中;

每日装载的时候,原始拉链表与用户变化表left join,然后将变化的数据写入到join后的表中,最后使用union all进行去重得到拉链表。

image.png

----DWS DWT ADS 以业务需求为驱动,与维度建模没有关系-----------------------------

  • dws层:存放所有主题对象当天的汇总行为,例如每个地区当天的下单次数,下单金额等。

    • nvl函数(表达式1,表达式2),如果表达式1为空值,则返回表达式2的值。否则返回表达式1的值。该函数的目的是将空值转化成一个实际的值。日期处理函数date_format(‘2020-06-24’,'yyyy-mm')函数,date_add()函数,next_day函数,
    • 访客主题:指的是没有注册的用户访问的次数,访问渠道
    • 用户主题:用户登录次数,加购次数,点击次数,下单次数,退单次数等
    • 商品主题:被支付次数,好评次数,评论
  • dwt层:存放所有主题对象的累计行为,例如某个地区近七天\15天\30天的下单次数,下单金额等。

  • ads层:对电商系统的各大指标进行分析。

    • 访客主题:访客统计。进行路径分析,分析用户在APP中的访问路径,可以衡量网站优化的效果和营销推广的效果,以及了解用户的行为偏好,使用桑基图来分析用户路径。

image.png

  • 用户主题:统计新增用户数,新增下单用户数,下单总金额,下单用户数以及未下单的用户数。使用漏斗模型分析从浏览用户到支付用户的转化率情况

image.png

image.png

分析用户的留存,一半包括新增留存和活跃留存。新增留存就是在某天的新增用户中,有多少人有后续的活跃行为。活跃留存就是在某天的活跃用户中,后续多少天还是继续活跃的。留存分析是衡量产品对用户价值高低的重要指标。

  • 商品主题:统计某个或者某类的spu被下单的总次数,分析商品的复购率=重复买品牌的用户/买该品牌的总用户,
  • 订单主题:统计订单个数

实现数据仓库的自动化,可以使用Azkaban的调度系统或者linux的crontab定时启动任务。

实习问题

  1. 实习的公司是做什么的,平时做什么业务的

    南京优速网络:是做toB项目的,面向政企服务,为政府或者企业做系统。例如致网教育是为省内的高校企业提供教育培训的平台,就是有点类似慕课系统,或者是仿真实验的系统。 江苏臻云技术:为企业建立大数据平台的,为政府,教育,金融,数字化乡村等各个领域简历数据平台的。

  2. 实习的部门是什么部门?部门有几个人?

  • 都是数据开发组,数据中台部门
  • 部门有五个左右,一个前端,两个后端,两个大数据。
  • 前端:可视化
  • 两个后端:写接口,前后端配合做一些产品。
  • 大数据:做底层,开发落地数据库,例如clickhouse或者mr yarn,实时的flink组件
  1. 实习期间做什么事情?

整个部门的目标是建立离线数仓

  • 采集模块,用户行为数据或者业务数据到hdfs,或者kafka
  • 给业务的同学清洗数据,用hive过滤一些空值等去清洗脏数据
  • 写hive SQL,数据的生命周期项目:数据要进行冷归档,数据不能存储在物理机,成本很高,就存在阿里云oss对象上,热数据放在物理机,冷数据放到oss上。用hive hook提取hive的操作行为,将经常用到到表或者分区放到物理机上,不经常用的分区进行冷备。分析数据分析师的操作行为,将他们经常用的表作为热数据放到物理机上,不经常用的表作为冷数据放到阿里云oss中存储。
  • 实现这个接口: ExecuteWithHookContext
  1. 实习的收获是什么?

完成了从理论到实际生产中的实践的第一步,为以后的大数据学习打下了基础,此外锻炼了各种大数据组件的使用能力,以及熟悉了生产中的一个开发环境和开发氛围。

小组分配管理的问题

  1. 离线数仓的项目分配的问题
  • 一个可视化,包含前后端。

  • 一个采集数据到HDFS

  • 并给数据进行分层,形成数据仓库

  • 调度系统:AZkaban的调度系统或者crontab

  • 数据治理:数据质量,如果与以前的数据发生了偏差,要发出告警

  1. 你承担了那部分职责
  • 我采集数据 + 给数据仓库进行分层。
  1. 如果有组员不愿意配合怎么办?

首先反思自己:是否是我的分配工作方式,沟通方式有问题。可能是我总是让组员做重复性的工作,或者是他不擅长的工作。在沟通方式上,可能我的沟通方式太死板,不容易被人接受。

如果是沟通方式出现问题,会调整沟通方式和分配给同时的任务。如果是老同事的话积极沟通,主动请教问题,耐心。

与同时进行积极的沟通,向他说明事情的严重性,可以适当为他调整工作内容。

每周都要进行汇报,汇报进度,提出工作中存在的问题,每个人畅所语言,为工作的改进提出更好的建议。让大家发挥各自的优势完成项目。

  1. 项目中你遇到的最大的难题是什么?

采集数据hdfs小文件的问题 制作拉链表 数据倾斜的问题。

  1. 项目的收获

熟练使用大数据组件项目,知道一套完整的数据仓库的流程,了解了电商的指标等,进一步提高了理论与实践结合的能力。

实时数据仓库