首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

维度模型数据仓库(九) —— 角色扮演维度

(五)进阶技术         4. 角色扮演维度         当一个事实表多次引用一个维度表时会用到角色扮演维度。例如,一个销售订单有一个是订单日期,还有一个交货日期,这时就需要引用日期维度表两次。         本篇将说明两类角色扮演维度的实现,分别是表别名和数据库视图。这两种都使用了MySQL的功能。表别名是在SQL语句里引用维度表多次,每次引用都赋予维度表一个别名。而数据库视图,则是按照事实表需要引用维度表的次数,建立相同数量的视图。         修改数据库模式         使用清单(五)-4-1里的SQL脚本修改数据库模式。分别给数据仓库里的事实表sales_order_fact和源数据库中订单销售表sales_order增加request_delivery_date_sk和request_delivery_date列。图(五)- 4-1 显示了修改后的模式。

02

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

三、维度子集         有些需求不需要最细节的数据。例如更想要某个月而不是某天的记录。再比如相对于全部的销售数据,可能对某些特定状态的数据更感兴趣等。这些特定维度包含在从细节维度选择的行中,所以叫维度子集。维度子集比细节维度的数据少,因此更易使用,查询也更快。         本节中将准备两个特定维度,它们均取自现有的维度:月份维度(日期维度的子集),Pennsylvania州客户维度(客户维度的子集)。 1. 建立月份维度表         执行下面的脚本建立月份维度表。注意月份维度不包含promo_ind列,该列不适用月层次上,因为一个月中可能有多个促销期,而且并不是一个月中的每一天都是促销期。促销标记适用于天这个层次。

02

维度模型数据仓库(八) —— 维度子集

(五)进阶技术         3. 维度子集         有些需求不需要最细节的数据。例如更想要某个月而不是某天的记录。再比如相对于全部的销售数据,可能对某些特定状态的数据更感兴趣等。这些特定维度包含在从细节维度选择的行中,所以叫维度子集。维度子集比细节维度小,因此更易使用,查询也更快。         本篇中将准备两个特定维度,它们均取自现有的维度:月份维度(日期维度的子集),Pennsylvania州客户维度(客户维度的子集)。清单(五)-3-1里的脚本用于建立月份维度,并从日期维度初始装载月份维度。注意月份维度不包含promo_ind列,该列不适用月层次上,因为一个月中可能有多个促销期。促销标记适用于日层次。

02

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

三、维度子集 有些需求不需要最细节的数据。例如更想要某个月而不是某天的记录。再比如相对于全部的销售数据,可能对某些特定状态的数据更感兴趣等。这些特定维度包含在从细节维度选择的行中,所以叫维度子集。维度子集比细节维度的数据少,因此更易使用,查询也更快。 本节中将准备两个特定维度,它们均取自现有的维度:月份维度(日期维度的子集),Pennsylvania州客户维度(客户维度的子集)。 1. 建立月份维度表 执行下面的脚本建立月份维度表。注意月份维度不包含promo_ind列,该列不适用月层次上,因为一个月中可能有多个促销期,而且并不是一个月中的每一天都是促销期。促销标记适用于天这个层次。

01

维度模型数据仓库(十三) —— 退化维度

(五)进阶技术         8. 退化维度         本篇讨论一种称为退化维度的技术。该技术减少维度的数量,简化维度数据仓库的模式。简单的模式比复杂的更容易理解,也有更好的查询性能。当一个维度没有数据仓库需要的任何数据时就可以退化此维度。需要把退化维度的相关数据迁移到事实表中,然后删除退化的维度。         退化订单维度         本节说明如何退化订单维度,包括对数据仓库模式和定期装载脚本的修改。使用维度退化技术时你首先要做的识别数据,分析从来不用的数据列。例如,订单维度的order_number列就可能是这样的一列。但如果用户想看事务的细节,还需要订单号。因此,在退化订单维度前,要把订单号迁移到sales_order_fact表。图(五)- 8-1显示了迁移后的模式。

02

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

(五)进阶技术         12. 无事实的事实表         本篇讨论一种技术,用来处理源数据中没有度量的需求。例如,产品源数据不包含产品数量信息,如果系统需要得到产品的数量,很显然不能简单地从数据仓库中直接得到。这时就要用到无事实的事实表技术。使用此技术可以通过持续跟踪产品的发布来计算产品的数量。可以创建一个只有产品(计什么数)和日期(什么时候计数)维度代理键的事实表。之所以叫做无事实的事实表是因为表本身并没有度量。         产品发布的无事实事实表  本节说明如何实现一个产品发布的无事实事实表,包括新增和初始装载product_count_fact表。图(五)- 12-1显示了跟踪产品发布数量的数据仓库模式(只显示与product_count_fact表有关的表)。

01

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

九、退化维度 本节讨论一种称为退化维度的技术。该技术减少维度的数量,简化维度数据仓库模式。简单的模式比复杂的更容易理解,也有更好的查询性能。当一个维度没有数据仓库需要的任何数据时就可以退化此维度,此时需要把退化维度的相关数据迁移到事实表中,然后删除退化的维度。 1. 退化订单维度 本小节说明如何退化订单维度,包括对数据仓库模式和定期装载脚本的修改。使用维度退化技术时你首先要识别数据,分析从来不用的数据列。例如,订单维度的order_number列就可能是这样的一列。但如果用户想看事务的细节,还需要订单号。因此,在退化订单维度前,要把订单号迁移到sales_order_fact表。下图显示了迁移后的模式。

02

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

十三、无事实的事实表 本节讨论一种技术,用来处理源数据中没有度量的需求。例如,产品源数据不包含产品数量信息,如果系统需要得到产品的数量,很显然不能简单地从数据仓库中直接得到。这时就要用到无事实的事实表技术。使用此技术可以通过持续跟踪产品的发布来计算产品的数量。可以创建一个只有产品(计什么数)和日期(什么时候计数)维度代理键的事实表。之所以叫做无事实的事实表是因为表本身并没有度量。 1. 产品发布的无事实事实表 本小节说明如何实现一个产品发布的无事实事实表,包括新增和初始装载product_count_fact表。下图显示了跟踪产品发布数量的数据仓库模式(只显示与product_count_fact表有关的表)。

02

维度模型数据仓库(十) —— 快照

(五)进阶技术         5. 快照         前面实验说明了处理维度的扩展。本篇讨论两种事实表的扩展技术。         有些用户,尤其是管理者,经常会要看某个特定时间点的数据。也就是说,他们需要数据的快照。周期快照和累积快照是两种处理事实表扩展的技术。         周期快照是在一个给定的时间对事实表进行一段时期的总计。例如,一个月销售订单周期快照是每个月底时总的销售订单金额。         累积快照用于跟踪事实表的变化。例如,数据仓库可能需要累积(存储)销售订单从下订单的时间开始,到订单中的商品被出库、运输和到达的各阶段的时间点数据来跟踪订单生命周期的进展情况。用户可能要取得在某个给定时间点,销售订单处理状态的累积快照。         下面说明周期快照和累积快照的细节问题。         周期快照         本节以销售订单的月底汇总为例说明如何实现一个周期快照。         首先需要添加一个新的事实表。图(五)- 5-1中的模式显示了一个名为month_end_sales_order_fact的新事实表。该表中有两个度量值,month_order_amount和month_order_quantity,这两个值是不能加到sales_order_fact表中的。不能加到sales_order_fact表中的原因是,sales_order_fact表和新的度量值有不同的时间属性(数据的粒度不同)。sales_order_fact表包含的是每天一条记录。新的度量值要的是每月的数据。使用清单(五)- 5-1里的脚本建立month_end_sales_order_fact表

01

维度模型数据仓库(十八) —— 迟到的事实

(五)进阶技术         13. 迟到的事实         装载日期在生效日期后的事实就是迟到的事实。晚于订单日期进入源数据的销售订单可以看做是一个迟到事实的例子。销售订单被装载进其事实表时,装载的日期晚于销售订单的订单日期,因此是一个迟到的事实。(因为定期装载的是前一天的数据,所以这里的晚于指的是晚2天及其以上。)         迟到事实影响周期快照事实表的装载,如(五)进阶技术5. “快照”中讨论的month_end_sales_order_fact表。比方说,2015年3月的销售订单金额月底快照已经计算并存储在month_end_sales_order_fact表中,这时一个迟到的订单在3月10日被装载,那么2015年3月的快照金额必须因迟到事实而重新计算。         处理迟到事实         本节说明当导入month_end_sales_order_fact表时如何处理迟到的销售订单。    为了知道一个销售订单是否是迟到的,需要把销售订单数据源的登记日期装载进sales_order_fact表。由于现在还没有登记日期列,你需要在事实表上添加此列。使用维度角色扮演技术添加登记日期。因此,在销售订单事实表里添加名为entry_date_sk的日期代理键列,并且从日期维度表创建一个叫做entry_date_dim的数据库视图。清单(五)-13-1里的脚本创建entry_date_dim视图和销售订单事实表里的entry_date_sk代理键列。

03
领券