首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

数据仓库中的维度表和事实表概述

一般来说,一个事实数据表都要和一个或多个纬度表相关联,用户在利用事实数据表创建多维数据集时,可以使用一个或多个维度表。...维度表 维度表可以看作是用户来分析数据的窗口,纬度表中包含事实数据表中事实记录的特性,有些特性提供描述性信息,有些特性指定如何汇总事实数据表数据,以便为分析者提供有用的信息,维度表包含帮助汇总数据的特性的层次结构...在维度表中,每个表都包含独立于其他维度表的事实特性,例如,客户维度表包含有关客户的数据。维度表中的列字段可以将信息分为不同层次的结构级。...结论 1、事实表就是你要关注的内容; 2、维度表就是你观察该事务的角度,是从哪个角度去观察这个内容的。 例如,某地区商品的销量,是从地区这个角度观察商品销量的。...事实表就是销量表,维度表就是地区表。

4.7K30

维度模型数据仓库(四) —— 初始装载

在2015年3月2日装载2015年3月1日的数据,之后周期性地每天装载前一天的数据。在装载事实表前,必须先装载所有的维度表。因为事实表需要维度的代理键。这不仅针对初始装载,也针对定期装载。...在本示例中,客户和产品的源数据直接与其数据仓库里的目标表,customer_dim和product_dim表相对应。另一方面,销售订单事务表是多个数据仓库表的源。...SCD1一般用于修改错误的数据。 SCD2在源数据发生变化时,给维度记录建立一个新的“版本”,从而维护维度历史。SCD2不删除、修改已存在的数据。 SCD3保持维度记录的一个版本。...在本示例中,客户维度历史使用SCD1,产品维度历史的产品名称和产品类型属性使用SCD2。        ...销售订单事实表的外键列由维度表的代理键导入。date_dim维度表的数据已经预生成,日期从2000年1月1日到2020年12月31日。

57430
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    基于Hadoop生态圈的数据仓库实践 —— ETL(二)

    在Hadoop 2中,YARN将资源管理和调度从MapReduce框架中解耦。...在2015年3月2日装载2015年3月1日的数据,之后周期性地每天装载前一天的数据。在装载事实表前,必须先装载所有的维度表。因为事实表需要维度的代理键。这不仅针对初始装载,也针对定期装载。...SCD1一般用于修改错误的数据。 SCD2在源数据发生变化时,给维度记录建立一个新的“版本”,从而维护维度历史。SCD2不删除、修改已存在的数据。 SCD3保持维度记录的一个版本。...在本示例中,客户维度历史的客户名称使用SCD1,客户地址使用SCD2,产品维度历史的产品名称和产品类型属性使用SCD2。 现在可以编写用于初始装载的脚本了。...这两个字段的初始值是“初始加载”执行的日期,本示例中为'2016-07-04'。当开始装载时,current_load设置为当前日期。在开始定期装载实验前,先使用下面的脚本建立时间戳表。

    2.3K20

    Greenplum 实时数据仓库实践(6)——实时数据装载

    同一个维度表中的不同字段可以有不同的变化处理方式。在本示例中,客户维度历史的客户名称使用SCD1,客户地址使用SCD2,产品维度的两个属性,产品名称和产品类型都使用SCD2保存历史变化数据。...从表6-2可知,customer_dim维度表的customer_street_address列上使用SCD2,customer_name列上使用SCD1。...列,则在customer_dim维度表上会触发SCD1和SCD2两种操作,那么是先处理SCD2,还是先处理SCD1呢?...如果先处理SCD1,后处理SCD2,则维度表的数据变化过程是先从1、1、2、3变为1、1、3、3,再新增一条记录2、1、3、4。此时表中的两条记录是1、1、3、3和2、1、3、4。...因此从功能上说,SCD1和SCD2的处理顺序并不关键,只需要记住对SCD1的字段,任意版本的值都正确,而SCD2的字段需要跟踪所有版本。从性能上看,先处理SCD1应该更好些,因为更新的数据行更少。

    2.6K20

    在Hive上实现SCD

    既然是数据仓库就离不开多维、CDC、SCD这些概念,于是尝试了一把在Hive上实现SCD1和SCD2。这有两个关键点,一个是行级更新,一个是生成代理键。...生成代理键在RDBMS上一般都用自增序列。Hive也有一些对自增序列的支持,本实验分别使用了窗口函数ROW_NUMBER()和hive自带的UDFRowSequence实现生成代理键。...修改了第1条数据的name列、cty列和st列(name列按SCD2处理,cty列和st列按SCD1处理) 4. 修改了第4条数据的cty列和st列(按SCD1处理) 5....-- 因为hive的update还不支持子查询,所以这里使用了一个临时表存储需要更新的记录,用先delete再insert代替update -- 因为SCD1本身就不保存历史数据,所以这里更新维度表里的所有...-- 因为hive的update还不支持子查询,所以这里使用了一个临时表存储需要更新的记录,用先delete再insert代替update -- 因为SCD1本身就不保存历史数据,所以这里更新维度表里的所有

    84620

    HAWQ取代传统数仓实践(三)——初始ETL(Sqoop、HAWQ)

    表1汇总了示例中维度表和事实表用到的源数据表及其抽取模式。...在2017年3月2日装载2017年3月1日的数据(假设执行频率是每天一次),之后周期性地每天装载前一天的数据。在装载事实表前,必须先装载所有的维度表。因为事实表需要引用维度的代理键。...SCD1一般用于修改错误的数据。 SCD2 - 在源数据发生变化时,给维度记录建立一个新的“版本”记录,从而维护维度历史。SCD2不删除、修改已存在的数据。...同一个维度表中的不同字段可以有不同的变化处理方式。在传统数据仓库中,对于SCD1一般就直接UPDATE更新属性,而SCD2则要新增记录。...实现代理键         多维数据仓库中的维度表和事实表一般都需要有一个代理键,作为这些表的主键,代理键一般由单列的自增数字序列构成。

    1.5K71

    SCD的三层

    5.5.2 SCD1(缓慢渐变类型1) 通过更新维度记录直接覆盖已存在的值。不维护记录的历史。一般用于修改错误的数据,即历史数据就是错误数据,除此没有他用。...可以在 Customer 维度中使用来自业务数据库中的 Business Key - CustomerID 来追踪业务数据的变化,一旦发生变化那么就将旧的业务数据覆盖重写。...5.5.3 SCD2(缓慢渐变类型2) 在源数据发生变化时,给维度记录建立一个新的**“版本”记录**,从而维护维度历史。SCD2不删除、不修改已存在的数据。SCD2也叫拉链表。...以上面的例子来说,可能需要分析的结果是 BIWORK 在 2012年的时候购买额度整体平稳,但是从2013年开始购买额度减少了。...但是如果要维护的字段比较多,就比较麻烦,因为要更多的 Current 和 Previous 字段。所以 SCD3 用的还是没有 SCD1 和 SCD2 那么普遍。

    81720

    Kettle构建Hadoop ETL实践(六):数据转换与装载

    SCD1一般用于修改错误的数据。 SCD2 - 在源数据发生变化时,给维度记录建立一个新的“版本”记录,从而维护维度历史。SCD2不删除、修改已存在的数据。...在本示例中,客户维度历史的客户名称使用SCD1,客户地址使用SCD2,产品维度的两个属性,产品名称和产品类型都使用SCD2保存历史变化数据。...假设有一个维度表包含c1,c2、c3、c4四个字段,c1是代理键,c2是业务主键,c3使用SCD1,c4使用SCD2。源数据从1、2、3变为1、3、4。...如果先处理SCD1,后处理SCD2,则维度表的数据变化过程是先从1、1、2、3变为1、1、3、3,再新增一条记录2、1、3、4。此时表中的两条记录是1、1、3、3和2、1、3、4。...因此从功能上说,SCD1和SCD2的处理顺序并不关键,只需要记住对SCD1的字段,任意版本的值都正确,而SCD2的字段需要跟踪所有版本。但在性能上看,先处理SCD1应该更好些,因为更新的数据行更少。

    4.4K46

    维度模型数据仓库(五) —— 定期装载

    识别源数据与装载类型         定期装载首先要识别数据仓库的每个事实表和每个维度表用到的并且是可用的源数据。然后要决定适合装载的抽取模式和维度历史装载类型。...源数据 数据仓库表 抽取模式 维度历史装载类型 customer customer_dim 整体、拉取 address列上SCD2 name列上SCD1 product product_dim 整体、拉取...本示例中order_dim维度表和sales_order_fact使用基于时间戳的CDC抽取模式。...这两个字段的初始值是“初始加载”执行的日期,本示例中为'2015-03-01'。当开始装载时,current_load设置为当前日期。...客户地址、产品名称和产品分类使用SCD2,客户姓名使用SCD1。 只有前一天的销售订单被装载到order_dim和sales_order_fact表。

    34130

    OushuDB入门(五)——ETL篇

    表1汇总了示例中维度表和事实表用到的源数据表及其抽取模式。...在2018年3月2日装载2018年3月1日的数据(假设执行频率是每天一次),之后周期性地每天装载前一天的数据。在装载事实表前,必须先装载所有的维度表。因为事实表需要引用维度的代理键。...SCD1一般用于修改错误的数据。 SCD2 - 在源数据发生变化时,给维度记录建立一个新的“版本”记录,从而维护维度历史。SCD2不删除、修改已存在的数据。...同一个维度表中的不同字段可以有不同的变化处理方式。在传统数据仓库中,对于SCD1一般就直接UPDATE更新属性,而SCD2则要新增记录。...(3)实现代理键 多维数据仓库中的维度表和事实表一般都需要有一个代理键,作为这些表的主键,代理键一般由单列的自增数字序列构成。

    1.3K20

    一般数据库增量数据处理和数据仓库增量数据处理的几种策略

    从 Staging 到DW 一般又分为维度 ETL 处理和事实 ETL 处理两个部分。...那么实际上从 Source 到 Staging 的过程中,就已经有意识的对维度和事实进行了分类加载处理。通常情况下,作为维度的数据量较小,而作为业务事实数据量通常非常大。...通常情况下,对数据仓库从 Source 到 Staging 增量数据的处理可以按照这种方式: 对于具有维度性质的数据表可以在 Staging 中采取全卸载,全重新加载的模式。...至于从 Staging 到 DW 的这一过程,通常情况下包含了维度 SCD 过程和事实 Lookup 过程,这个在后面再陆续写。...在 SSIS 中的实现可以参看我的这篇博客 - SSIS 系列 - 数据仓库中实现 Slowly Changing Dimension 缓慢渐变维度的三种方式 其它的加载策略 增量加载的处理策略不是一成不变的

    3.2K30

    基于Hadoop生态圈的数据仓库实践 —— 进阶技术(十三)

    十三、无事实的事实表 本节讨论一种技术,用来处理源数据中没有度量的需求。例如,产品源数据不包含产品数量信息,如果系统需要得到产品的数量,很显然不能简单地从数据仓库中直接得到。...这时就要用到无事实的事实表技术。使用此技术可以通过持续跟踪产品的发布来计算产品的数量。可以创建一个只有产品(计什么数)和日期(什么时候计数)维度代理键的事实表。...产品发布的无事实事实表 本小节说明如何实现一个产品发布的无事实事实表,包括新增和初始装载product_count_fact表。...下图显示了跟踪产品发布数量的数据仓库模式(只显示与product_count_fact表有关的表)。 ? 执行下面的脚本创建产品发布日期视图和无事实事实表。...该脚本在导入product_dim表后还要导入product_count_fact表。下面显示了修改后的定期装载脚本。实际上只是把上面的初始装载脚本加在了装载销售订单事实表之前。

    35420

    基于Hadoop生态圈的数据仓库实践 —— 进阶技术(三)

    先向一个临时表date_dim_tmp中加载数据,然后在append_date.sql中处理从date_dim_tmp到date_dim的装载。...无论何时用修改后的脚本增加日期记录时,如果这个日期所在的月份没在月份维度中,那么该月份会被装载到月份维度中。下面测试一下日期和月份维度表数据的预装载。.../date_dim_generate.sh 2000-01-01 2010-12-31     这次执行维度表都是新建的,生成的日期和月份维度数据如下图所示。.../date_dim_generate.sh 2011-01-01 2020-12-31    这次执行是向已有的维度表中追加日期,生成的日期和月份维度数据如下图所示。...-- 设置已删除记录和地址相关列上SCD2的过期,用运算符处理NULL值。

    25820

    警务数据仓库的实现

    (2)配置数据流任务   一个 SSIS 包通常由若干个数据流任务连接起来的控制流组成,它们是从数据源中抽取数据,并将其清理、合并转换后加载到数据仓库的一个集成解决方案。...将 OLTPHotel 中常住人口表 CZRK、暂住人口表 ZZRK 和人员前科表 RYQK,加载到数据仓库 HuangDW_Hotel 目的表 DimPeople(人员维度表)之中。...将 OLTPHotel 旅馆入住表 LGRZ 的数据抽取出来,派生出年、月、日、时等新列,加载到数据仓库 HuangDW_Hotel 目的表 FactHotel(旅馆事实表)之中。...将 OLTPHotel 中犯罪类型表 FZLX 的数据抽取出来,加载到 HuangDW_Hotel 目的表 DimCaseType(犯罪类型维度表)之中。...(1)SSIS 包要想完成从数据源抽取数据,并将其转换和加载到数据仓库等各种操作步骤,都需要借助工具箱中的特定控件来实现。

    6400

    一文读懂如何处理缓慢变化的维度(SCD)

    整体维度数据建模将数据分为两大类: 事实——这些数据代表存储实体测量值的无限数据集。它包含定量分析和决策所必需的数据。事实表经常具有连接到其他表(维度)以供参考的列。...维度-该数据代表相对有限的数据集,提供有关事实表中执行的测量的描述性信息。与事实表相比,维度的发展速度要慢得多。这就是它们通常被称为“缓慢变化的维度”的原因。...SCD2型 也称为“添加新记录”方法。在此方法中,更改记录将作为新记录添加到维度表中,并标记为“当前”或“活动”。此外,先前版本的记录被标记为“已过期”或“无效”。...记录的各个版本(当前版本和历史版本)使用代理键绑定在一起。在表级别,SCD类型2是通过为维度表中的每一行添加StartDate和EndDate时间戳列来实现的。...如果您讨厌SCDType1的局限性并且发现SCDType2难以实施和管理,那么这是一个很好的权衡。 在许多方面,SCD2型通常被认为是实现缓慢变化维度的主要技术。

    68722

    基于Hadoop生态圈的数据仓库实践 —— 进阶技术

    先向一个临时表date_dim_tmp中加载数据,然后在append_date.sql中处理从date_dim_tmp到date_dim的装载。...无论何时用修改后的脚本增加日期记录时,如果这个日期所在的月份没在月份维度中,那么该月份会被装载到月份维度中。下面测试一下日期和月份维度表数据的预装载。.../date_dim_generate.sh 2000-01-01 2010-12-31 这次执行维度表都是新建的,生成的日期和月份维度数据如下图所示。 ? ?.../date_dim_generate.sh 2011-01-01 2020-12-31 这次执行是向已有的维度表中追加日期,生成的日期和月份维度数据如下图所示。 ? ?...-- 设置已删除记录和地址相关列上SCD2的过期,用运算符处理NULL值。

    54810

    基于Hadoop生态圈的数据仓库实践 —— 进阶技术(一)

    一、增加列 数据仓库最常碰到的扩展是给一个已经存在的维度表和事实表添加列。本节说明如何在客户维度表和销售订单事实表上添加列,并在新列上应用SCD2,以及对定时装载脚本所做的修改。...假设需要在客户维度中增加送货地址属性,并在销售订单事实表中增加数量度量值。 先看一下增加列时模式发生的变化。 修改后源数据库模式如下图所示。 ?...这些在关系数据库中很普通的操作,最后一步查询居然出错,如下图所示。 ?...-- 设置已删除记录和地址相关列上SCD2的过期,用运算符处理NULL值。...-- 因为hive的update的set子句还不支持子查询,所以这里使用了一个临时表存储需要更新的记录,用先delete再insert代替update -- 因为SCD1本身就不保存历史数据,所以这里更新维度表里的所有

    50430

    维度模型数据仓库(十七) —— 无事实的事实表

    无事实的事实表         本篇讨论一种技术,用来处理源数据中没有度量的需求。例如,产品源数据不包含产品数量信息,如果系统需要得到产品的数量,很显然不能简单地从数据仓库中直接得到。...这时就要用到无事实的事实表技术。使用此技术可以通过持续跟踪产品的发布来计算产品的数量。可以创建一个只有产品(计什么数)和日期(什么时候计数)维度代理键的事实表。...产品发布的无事实事实表  本节说明如何实现一个产品发布的无事实事实表,包括新增和初始装载product_count_fact表。...图(五)- 12-1         执行清单(五)-12-1里的脚本创建产品发布日期视图和无事实事实表。...“杂项维度”中的定期装载做了两点修改:“清空过渡表”作业项加了清空product_count_fact表;把初始装载产品数量事实表的步骤合并到了“装载事实表(定期)”作业项里。

    90310

    维度模型数据仓库(六) —— 增加列

    增加列         数据仓库最常碰到的扩展是给一个已经存在的维度表和事实表添加列。本篇先讨论如果需要增加列,模式会发生怎样的变化。...然后进一步说明如何在客户维度和销售订单事实表上添加列,并在新列上应用SCD2。假设需要在客户维度中增加送货地址属性,并在销售订单事实表中增加数量度量值。        ...修改数据库模式         图(五)- 1-1 显示了修改后的模式,在它的customer_dim表和sales_order_fact表上增加了新列。...如果还想维护送货地址的历史数据,就要在送货地址列上应用SCD2。还假设数量在销售订单源数据中是有效的,并且数据仓库中已经存在的销售订单不做更新。        ...说明:Kettle的修改相对于SQL来说更容易,只需要对上一篇的三个步骤进行修改,这三个步骤分别是“装载过渡表”、“装载客户维度”、“装载事实表”,把新增加的列补充上即可。

    67430
    领券