数据仓库完全用统计分析框架实现:Spark,MR
但是因为实际生产环境中,需求量非常大,
如果每个需求都采用独立c代码开发方式,重复计算会很多.
提高性能的方法: 1.减少数据量 2. 减少重复计算
例如RDD
cache 可以减少重复计算,但是不安全,都在缓存中,
persist 都放内存中,但是慢
而数仓是通过表来保存数据,从而达到减少重复计算的操作.
1.数据仓库的模块流程
1.数据源ODS(Operate Data Store)
1.作用: 汇总数据,为统计分析做准备
2.特点(能不改就不改)
1.行式存储
不需要进行统计分析,所以尽量不改变存储格式,因为修改数据格式需要消耗大量资源.,
2.数据格式
尽量不改变数据格式,消耗资源,影响性能.
JSON,TSV
但是如果必须要修改,就是异构数据的融合,
2.数据加工(Data Warehouse detail)
1.作用
为统计分析做准备
2.什么意思?
对数据的加工如过滤,无效数据筛选,
3.统计(DWS ->Data Warehouse Summary)
1.作用
对加工后的数据进行统计
4.分析(ADS->Application Data Service)
应用程序数据服务
1.作用
分析后的结构是整个数仓的最终结果,最后需要对外提供服务,例如:可视化界面图像.
5.DIM层(Common)
1.什么是维度(Dimension)
看事物的角度
2.层级之间的思考?
每一层执行完,再执行下一层,确保不会出现回环
2.如何控制SQL的执行
通过SQL和任务调度器,由任务调度器来完成调度工作.
2.每层的问题
1.ODS层
1.创建
- 1.建表格式 创建外部表,而不是创建内部表,因为在最初创建时,可能会频繁修改表结构,但是如果是内部表就会删除数据,所以使用外部表.所以如果表是设计好的,就可以使用内部表创建.
- 2.压缩 因为ODS是数据源,需要存储海量数据,所以需要压缩数据,而这里的压缩,选择压缩率最高的,所以是选择GZIP
DROP TABLE IF EXISTS ods_base_category2_full;
CREATE EXTERNAL TABLE ods_base_category2_full
(
`id` STRING COMMENT '编号',
`name` STRING COMMENT '二级分类名称',
`category1_id` STRING COMMENT '一级分类编号',
`create_time` STRING COMMENT '创建时间',
`operate_time` STRING COMMENT '修改时间'
) COMMENT '二级品类表'
PARTITIONED BY (`dt` STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
NULL DEFINED AS ''
LOCATION '/warehouse/gmall/ods/ods_base_category2_full/'
TBLPROPERTIES ('compression.codec'='org.apache.hadoop.io.compress.GzipCodec');
3.装载数据,如果数据转移到目录下但是没有元数据,则修复分区
hive (default)>
msck repair table table_name [add/drop/sync partitions];