基于Hadoop生态圈的数据仓库实践 —— 进阶技术(五).doc
文本预览下载声明
基于Hadoop生态圈的数据仓库实践 —— 进阶技术(五)
五、快照
前面实验说明了处理维度的扩展。本节讨论两种事实表的扩展技术。
有些用户,尤其是管理者,经常要看某个特定时间点的数据。也就是说,他们需要数据的快照。周期快照和累积快照是两种常用的事实表扩展技术。
周期快照是在一个给定的时间对事实表进行一段时期的总计。例如,一个月销售订单周期快照汇总每个月底时总的销售订单金额。
累积快照用于跟踪事实表的变化。例如,数据仓库可能需要累积(存储)销售订单从下订单的时间开始,到订单中的商品被打包、运输和到达的各阶段的时间点数据来跟踪订单生命周期的进展情况。用户可能要取得在某个给定时间点,销售订单处理状态的累积快照。
下面说明周期快照和累积快照的细节问题。
1. 周期快照
下面以销售订单的月底汇总为例说明如何实现一个周期快照。
首先需要添加一个新的事实表。下图中的模式显示了一个名为month_end_sales_order_fact的新事实表。
该表中有两个度量值,month_order_amount和month_order_quantity。这两个值是不能加到sales_order_fact表中的,原因是,sales_order_fact表和新的度量值有不同的时间属性(数据的粒度不同)。sales_order_fact表包含的是每天一条记录。新的度量值要的是每月的数据。使用下面的脚本建立month_end_sales_order_fact表。
[sql] view plain copy 在CODE上查看代码片派生到我的代码片
USE dw;
CREATE TABLE month_end_sales_order_fact (
order_month_sk INT COMMENT order month surrogate key,
product_sk INT COMMENT product surrogate key,
month_order_amount DECIMAL(10,2) COMMENT month order amount,
month_order_quantity INT COMMENT month order quantity
)
CLUSTERED BY (order_month_sk) INTO 8 BUCKETS
STORED AS ORC TBLPROPERTIES (transactional=true);
建立了month_end_sales_order_fact表后,现在需要向表中装载数据。月底销售订单事实表的数据源是已有的销售订单事实表。month_sum.sql文件用于装载月底销售订单事实表,该文件内容如下。
[sql] view plain copy 在CODE上查看代码片派生到我的代码片
-- 设置变量以支持事务
set hive.support.concurrency=true;
set hive.exec.dynamic.partition.mode=nonstrict;
set hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;
set pactor.initiator.on=true;
set pactor.worker.threads=1;
USE dw;
SET hivevar:pre_month_date = add_months(current_date,-1);
delete from month_end_sales_order_fact
where month_end_sales_order_fact.order_month_sk in
(select month_sk
from month_dim
where month = month(${hivevar:pre_month_date})
and year = year(${hivevar:pre_month_date}));
insert into month_end_sales_order_fact
select b.month_sk, duct_sk, sum(order_amount), sum(order_quantity)
f
显示全部