数据仓库

2018-08-22  本文已影响12人  千反田爱瑠爱好者

数据仓库与业务系统数据库

数据仓库

业务系统

使用Hadoop

传统数据仓库

Hadoop优势

Sqoop(操作型数据源系统)、Flume/Kafka(日志等)-> HDFS -> Hive/Impala/Spark/HBase
<-> Sqoop(EDW)
<-> 分析工具

术语

模型

粒度:事实表粒度大小(一条记录代表什么),应尽可能细小;

可加性:字段是否可以直接相加(指标),计数或者求平均值(维度);

事实表:拥有一或多个外键(参考维表,如订单表的城市ID),主键为一系列外键的组合(唯一标识一条记录);

聚合事实表:为了加速查询而构建的事实表聚合(如每天订单平均金额);

维表:各种查询约束(如省份城市表),及报表标签源头;

日历维度:附加在大多数的事实表和一些维表上;

缓慢变化的维度:把已存在的旧值修改为新的值(机器基本信息表),要么使用新值添加一条新的记录,并将其标记为当前值,将旧的标记为废弃(机器基本信息历史表);

架构设计

数据建模与存储

选择存储引擎::取决于数据访问方式

反范式设计:为分析提速(Hadoop不适合进行多次关联操作,尤其是较大的事实表关联较小的维表:比如处理时订单表应直接写入机器信息而非ID,避免查询时机器信息表再与订单表关联),也避免维护多个数据集的繁琐,缺点是:带来数据冗余,数据采集流水线变得繁琐,数据更新困难;

数据更新:HDFS不支持原地更新,而且即使加上处理逻辑原地更新后也无法追踪更新流水记录

事实表:根据更新时间取日增量每天同步追加(如订单收益取生成时间,订单退款取更新时间同步到事实表,即可计算净收益同时追踪变化,如有需要还可以另外维护一个订单全量表记录订单最新状态信息);
历史表:根据更新时间取日全量每天同步(完整的用户表,同时最新的一份可以作为状态表);

存储格式及压缩算法

分区方式:取决于数据访问方式,目的是跳过不必要的数据;按时间周期分区分区平均大小为HDFS数据块的若干倍(典型值为每天数据1GB则按天分区,较多则按小时,较少则按周或月)

数据采集

OLTP导出:Sqoop,Informatica,Pentaho,Kettle
对象:数据几乎不变的表(一次性导入),数据频繁更新的小表(日全量),数据频繁更新且无法每天全量提取的大表(日增量,周/月全量)

数据整合:Sqoop导出时执行关联(可以仅插入、仅更新和混合,但只支持简单的条件,而且关联操作会给OLTP带来压力;Sqoop同时支持元数据服务,可记录上次执行状态,下次执行时可以使用保证获取更新的记录)
导出到HDFS后再作关联(Spark、Hive)

数据处理与访问

分区

合并、更新:除了记录事实表,还要维护已有信息表(缓慢变化的维表等),可以全量导入,也可以从已有信息读出、追加修改后再重新写入,并更新元数据(如果有的话);

提高更新效率:只针对分区修改、添加Hadoop节点、改用HBase(如果更新频繁的话,但也会渐慢查询速度)

数据聚合

Hadoop支持在关系型数据库中执行很耗资源的聚合操作(求和、计数、平均,天然高度并行),使用Hive、Spark、Impala,聚合后的数据集通过Sqoop导出到关系型数据库,可再接入BI工具继续处理。

数据导出

流程调度

上一篇下一篇

猜你喜欢

热点阅读