zoukankan      html  css  js  c++  java
  • 数据仓库专题(9)-基本概念和定义(整理自互联网)

    1、星型模型的组成

    一个星型模型对应一个分析主题,它由一个事实表和一组维表组成。其中事实表是星型模型的核心,由分析变量和分析维度代理键组成,分析变量存放分析事实数 据,分析维度代理键用于连接维表。维表是星型模型的外围,存放分析维度数据,由维的代理键、维的层次属性、维的描述信息组成。

    2、星型维度模型设计的依据和步骤

    星型维度模型设计的依据是《业务需求》、《数据源分析报告》、《需求分析报告》、《功能设计》,星型维度模型设计的步骤是从逻辑模型到物理模型。

    3、星型维度模型设计方法

    (1)星型维度逻辑模型设计过程

     ①根据业务分析主题,确定模型主题(如根据贷款收息分析主题,确定贷款收息模型;根据贷款欠息分析主题,确定贷款欠息模型等)。

     ②列出每个模型主题的分析量和分类量。

     ③设计事实表。事实表可以由分析量+分析维度代理键得到。

     ④设计维表。维表可以由维SK+层次DK+其他属性信息得到,其中维SK、层次DK和其他属性信息可以从各个业务分析主题中总结得到。

     ⑤设计对照表。根据源系统中数据项的取值与数据仓库中数据项的取值的对照关系得到,采用SAS的FORMAT技术可以方便地使用对照表。

     ⑥决定模型中每个字段的来源和算法。根据《数据源分析报告》,决定模型中每个字段来自哪个表哪个字段、在何种条件下得到、通过何种计算得到。

     ⑦决定表的分割。表的分割是时间和空间的权衡折衷,星型维度模型采用下列分割方法:按汇总粒度的分割,逐笔表、日表、月表、年表等;

    按当前和历史分割,当前表、历史表;

    按访问频度分割,高访问频度表、低访问频度表;

    按变化频度分割,高变化频度表、低变化频度表。

    (2)星型维度物理模型设计过程

     ①表定义:表名、设计者、数据量估计。

     ②字段定义:名称、类型、长度、主键、索引。

     ③表与表之间的关系定义。

    4、星型维度模型设计考虑

    星型维度模型设计应有时间效率考虑和空间效率考虑两个方面。

    1.时间效率考虑

    星型维度模型中对时间效率考虑主要体现在中间表的设计和按访问频度的不同分割表两方面。

     (1)中间表的设计

    星型维度中间表的设计有利于并行处理、降低模块间的耦合性。中间表与事实表一一对应,用业务键而不是数据仓库的代理键,保存了对应事实表的新增事实数据; 使用SAS的DAT步扫描数据源表一次,就能得到多张中间表;将每个中间表的业务键连接维表得到代理键,就能实现中间表到事实表的转换。这样,不仅不同数 据源表抽取到中间表的过程可以并行处理,而且各个中间表到事实表的转换也可以并行处理。此外,每个模块间的耦合性降低了许多,模块的灵活性和可维护性得到 大大的提高。

     (2)按访问频度的不同分割表

    星型维度模型中维表或事实表的各项数据的访问频度常常是不同的。如果该维表或事实表的数据量较大,那么访问速度就会受到影响。如果将访问频度高的数据分离出来,放在不同的表中,就可以加快该部分数据的访问速度。                             

     2.空间效率考虑

    星型维度模型对空间效率的考虑主要体现在应用级数据压缩设计和按变动频度的不同分割表两方面。

     (1)应用级数据压缩设计

    星型维度模型的事实表和维表都保留历史信息。为使数据量不至于过大,事实表和维表都采用时间轴压缩设计,用有效开始日(EFFECTIVE_FROM)、有效截止日(EFFECTIVE_TO)来压缩这段时间内未发生变化的数据。

    在使用压缩的历史数据时,若进行解压缩,必然既耗费时间又浪费空间。通过巧妙设计JOIN方法,就可以不经过解压缩而得到准确的历史数据。例如:事实表a 和维表b都经过了时间轴压缩,现在事实表a需要JOIN维表b中相应时间点的信息,那么正确的结果应该是事实表a中的记录能够JOIN到维表b中所有在时 间段上与之相交的记录,并出现表2所示的四种基本相交情况。

    若将上述各种情况都写入SQL语句的WHERE条件,势必很复杂。经过对时间段交集的分析,可归纳出下列的WHERE条件:

    a.effective_from <= b.effective_to and a.effective_to >= b.effective_from

    就能够保证事实表和维表JOIN结果的正确。

     (2)按变动频度的不同分割表

    星型维度模型中的各项数据变动频度常常是不同的,例如客户的开户许可证、法人代表等数据往往变动频度较小,而信用等级等数据可能变动频度较大。由于要保存 历史数据的变动,变动频度不同的数据放在同一张表中容易造成数据的冗余。将变动频度较小的数据分离出来,放在不同的表中,就可以降低数据的冗余。

  • 相关阅读:
    真的简单,文本文件逐行处理–用java8 Stream流的方式
    架构师最常使用的5种架构模式及其适用场景分析
    静态集成腾讯TBS X5内核WebView,从微信提取新版30M浏览器内核打包进apk
    redis入门指南(六)—— 集群
    波士顿动力狗 SPOT 权威购买指北
    Boolean源码解剖学
    SpringBoot+Mybatis整合出现org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)的解决
    linux实现shell脚本监控磁盘内存达到阈值时清理catalina.out日志
    【日志】新版日志技术
    【日志】经典日志框架
  • 原文地址:https://www.cnblogs.com/hadoopdev/p/4513983.html
Copyright © 2011-2022 走看看