数仓项目架构:
项目流程
1、原始数据在mysql存储
2、使用kettle将数据在mysql同步到数据仓库(hive),(同步分为第一次全量+每天的增量=拉链表(目标:既能够保存历史的数据,又不会有数据冗余))
3、hive数仓内结构
Hive内部结构:
ODS: 存储在数据源同步过来的数据
DW:对ODS存储的数据进行过滤、填充,预计算,以及数据的拉宽。(拉宽:就是将业务上需要的字段,但是字段不在一个表中,使用拉宽(join)将这些字段合并到一个表中)
ADS:存储最终计算后的结果
4、使用kylin对hive内的数据进行预计算,提高查询效率(kylin对数据进行预计算)
5、部分数据同步至mysql,使用sqoop/kettle同步
5、使用kettle,Sqoop将计算结果同步到mysql
(需求说明清楚+sql说清楚+回写sql)
项目架构
数据来源:mysql
数据存储到哪里?hive
使用什么同步数据?kettle
计算模型是什么? ODS DW ADS
计算完毕的结构数据存储到哪?
Hive(ADS) :数仓的结果(慢)
MYSQL:(快)同步组件kettle,Sqoop
Kylin:(快速)
使用什么进行查询的加速??Kylin
项目介绍:项目的数据来源mysql,使用kettle把mysql数据同步到hive(全量数据和增量数据),在hive里面进行需求计算,使用hive数据库把数据计算模型分为三层:ODS(存储在数据源同步过来的数据)、DW(根据需求对数据进行过滤、填充,预计算,以及数据的拉宽。(拉宽:就是将业务上需要的字段,但是字段不在一个表中,使用拉宽(join)将这些字段合并到一个表中))、ADS(结果数据存储)。计算完数据存储到ads层,但是hive查询速度慢,可以使用kylin对hive内的数据进行预计算,使用sqoop/kettle将计算结果同步到mysql和kylin组件加速查询。
什么事数据仓库:
数据仓库(Data Warehouse)简称DW或DWH,是数据库的一种概念上的升级,可以说是为满足新需求设计的一种新数据库,而这个数据库是需容纳更多的数据,更加庞大的数据集,从逻辑上讲数据仓库和数据库是没有什么区别的。( 数据库是跟业务挂钩的,而数据库不可能装下一个公司的所有数据,因此数据库的设计通常是针对一个应用进行设计的。数据仓库是依照分析需求、分析维度、分析指标进行设计的。)
全量表没有分区,表中的数据是前一天的所有数据,比如说今天是5号,那么全量表里面拥有的数据是4号的所有数据,每次往全量表里面写数据都会覆盖之前的数据,所以全量表不能记录历史的数据情况,只有截止到当前最新的、全量的数据。
增量表,就是记录每天新增数据的表,比如说,从4号到5号新增了那些数据,改变了哪些数据,这些都会存储在增量表的5号分区里面。
拉链表,它是一种维护历史状态,以及最新状态数据的一种表。拉链表也是分区表,有些不变的数据或者是已经达到状态终点的数据就会把它放在分区里面,分区字段一般为开始时间:start_date和结束时间:end_date。一般在该天有效的数据,它的end_date是大于等于该天的日期的。获取某一天全量的数据,可以通过表中的start_date和end_date来做筛选,选出固定某一天的数据。例如我想取截止到20190908的全量数据,其where过滤条件就是where start_date<=‘20190908’ and end_date>=20999999。
拉链表不存储冗余的数据,只有某行的数据发生变化,才需要保存下来,相比每次全量同步会节省存储空间
能够查询到历史快照
额外的增加了两列(dw_start_date、dw_end_date),为数据行的生命周期
dim是维度表(维度表可以看成是用户用来分析一个事实的窗口,它里面的数据应该是对事实的各个方面描述,比如时间维度表,它里面的数据就是一些日,周,月,季,年,日期等数据,维度表只能是事实表的一个分析角度)
fact是事实表(事实表其实质就是通过各种维度和一些指标值得组合来确定一个事实的,比如通过时间维度,地域组织维度,指标值可以去确定在某时某地的一些指标值怎么样的事实。事实表的每一条数据都是几条维度表的数据和指标值交汇而得到的.)
tmp是临时表 两个表进行数据预处理 根据需求业务分析 进行拉宽得到的一个临时表,临时表作用于也是根据业务需求进行拉宽(join) 和其他的表进行拉宽 一直到得到最终的结果存入到ADS中。
四个需求分析:
第二个需求整理
获取全国、无商品分类维度的分交易类型数据
INSERT OVERWRITE TABLE itcast_ads.ads_trade_order PARTITION (dt=‘20190908’)
SELECT‘0’, --全国 大区–x 城市—y
‘9999’,
‘0’, --无商品分类 和 各个级别 1 2 3
‘9999’,
paytype,count(distinct orderid), sum(goodsnumgoodsprice)FROM itcast_dw.tmp_order_goods_cat_org WHERE dt=‘20190908’GROUP BY paytype;
思路:根据需求得出所属要的四个表,数据所属的地区,数据所属的商品类,数据的支付方式,数据的订单表,通过表与表之间的id找到对应的所属的表,一个订单表,一个支付表,一个商品分类表,组织结构表,进入dw所属要的数据进行拉宽,就是将业务上需要的字段,但是字段不在一个表中,使用拉宽(join)将这些字段合并会生成一个临时表,然后根据需求所属于查询的字段讲里面的数据进行插入ads结果表。
第三个需求的表介绍图:
Kylin的核心思想是利用空间换时间,由于查询方面制定了多种灵活的策略,进一步提高空间的利用率,使得这样的平衡策略在应用中是值得采用的。