1. 为什么做电商数仓
数据越来越多,我们把各部门的数据收集到一起,通过分析,计算等转化成对我们公司有价值的数据,为我们公司做决策提供一个数据支持.
2. 技术架构
(1). 日志数据:我们通过flume采集埋点的日志数据,然后拉取到kafka,再使用flume从kafka中拉取数据存到hdfs上.
(2). 业务数据:对业务数据,我们使用sqoop进行数据迁移,把业务数据从业务数据库中迁移到我们的大数据平台上,也就是hdfs上.
(3). 数仓工具:我们选取的是hive,因为hive是基于hdfs存储的,hive可以把数据转成结构化存储为表,还会提供类SQL的查询语句,类SQL完成指标时跟传统数据库mysql的查询语句相识,类SQL的学习相对容易,简单易学,能让我们新的技术人员快速上手,参与到项目开发中.
(4). 我们采用superset来进行数据可视化展示.
3. 数仓建模
(1). 我们选择的是维度建模,我们也是通过业务部们选择了这样的几条电商核心业务线,设备,商品,订单,地区,为了后期的指标扩展,我们声明的粒度都是最细的.
(2). 然后根据我们要做的指标结合我们的数据,确定了维度表和事实表.
4. 数仓分层
(1). 我们以前实现指标呢,是直接从数据库里进行分析计算,一条SQL直接干到底,就是这样的一个开发模式,我们中间出现了很多的问题,很多的重复开发步骤,所以初步考虑分为天元层,中间层,以及应用层.
(2). 结合指标我们开发小组讨论最终确定了分为5层.
①. ods层 数据原始层 存储我们的原始数据,不用做任何的操作,起到一个隔离原始数据的一个作用.
②. dwd层 对原始数据做一个简单的ETL清洗,完成维度建模
③. dws层 根据指标来建宽表,进行一个轻度的汇总,如按天汇总
④. dwt层 以dws层为基础,累积汇总,如按周按月汇总
⑤. ads层 为各种统计报表,可视化展示关联的mysql提供数据
(3). 分层的好处
①. 减少重复开发: 分为多层,可以重复使用我们的指标,重复使用各层的数据,主要体现在中间层.
②. 隔离原始数据: 把我们操作的数据和原始数据隔离,就算操作数据是发生问题,我们的原始数据还在,天元层.
③. 复杂问题简单化: 把大问题分解成多个小问题来完成,小问题实现起来就比较简单,每一层都处理一些简单的问题.
提高了开发项目过程中的效率和项目质量.
方便后期维护以及扩展