Chinaunix首页 | 论坛 | 博客
  • 博客访问: 223649
  • 博文数量: 31
  • 博客积分: 1427
  • 博客等级: 上尉
  • 技术积分: 409
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-04 15:21
文章分类

全部博文(31)

文章存档

2008年(31)

我的朋友

分类: Mysql/postgreSQL

2008-04-22 10:55:50

第七章 初始化导入

概述

在第6,“装载日期维”,你学习了如何载入日期维度表。本章,你将学习如何载入事实表和其他维度表。

在你的数据仓库开始运作之前,你需要载入历史数据。历史数据是你装载数据库仓库最初的一批数据。这个最初的装载被称为初始化装载。

你数据仓库的用户将决定在数据仓库中他们需要多少的历史数据。比如,如果你的数据仓库是从2007-03-01开始,你的用户希望载入2年的历史数据,你将载入从2005-03-12007-02-28期间的源数据。然后,在数据仓库开始运作的2007-03-01这天,你将载入2007-03-01的数据。

在你装载事实表之前,你将载入所有的维度表,因为事实表需要维度表的代理键。这不仅在初始化载入,而且在以后定期装载的过程中都需要这么做。(定期装载在第8章讨论)。

本章,我将说明如何完成初始化装载,包括鉴别源数据,开发初始化装载脚本,以及测试脚本。

源数据

本小节,我将解释,在你可以开始写初始化装载脚本之前,有那些关于源数据的主要方面需要去判别。

第一步是判别哪些源数据是数据仓库中的事实表和维度表必须或者有用的。你还需要知道数据源的特性,比如文件类型,数据结构以及如何获取。

表格7-1是一个示例文档,概述了在这个销售订单数据仓库中源数据的关键信息,包括文件类型,格式和数据仓库目标表。

这种类型的表格通常称为数据源映射,因为它标识了每个数据从源到目标的对应关系。维护该表格的活动称为数据源的配置管理。

注意:客户和产品维相关的源数据被直接映射到它们在数据仓库中的目标表,及customer_dim product_dim 表。另一方面,销售订单事务则是多个数据仓库表的源数据。你将在第20章中学习一个更为复杂的源数据,““不齐整数据源”。

7-1:你的数据仓库的数据源

以表格的形式展示该表

源数据

数据类型

文件或者表名

数据仓库中的目标表

Customer

CSV text file

customer.csv

customer_dim

Product

Fixed-width text file

product.txt

product_dim

Sales order transaction

MySQL

sales_order in source database

order_dim

sales_order_fact

date_dim, if you use “Loading the Date from Source” option, but you’ll use pre-population here

初始化载入脚本

       现在你已经鉴别了数据源,是时候开始编写用来初始化装载的脚本了。假设你的数据仓库将从2007-03-01开始运作,而你希望载入两年的历史数据,你需要载入从2005-03-012007-02-28期间的源数据。

列表7-1的脚本作为一个示例,注意以下:

       客户维和产品维的生效日期是2007-03-01,没有更早日期的销售订单被载入,这意味着,没有更早的客户维和产品维是必须的。

       订单维的生效日期理所当然是是订单日期。

       销售订单事实表的代理键字段被载入维度表的代理键值。

       你需要另外用预装载的方式预载入日期维date_dim表,从2005-03-12010-12-31

列表7-1:数据仓库初始化载入

/*****************************************************************/

/*                                                               */

/* dw_initial.sql                                                */

/*                                                               */

/*****************************************************************/

 

USE dw;

 

LOAD DATA INFILE 'customer.csv'

INTO TABLE customer_stg

FIELDS TERMINATED BY ','

OPTIONALLY ENCLOSED BY '"'

LINES TERMINATED BY '\r\n'

IGNORE 1 LINES

( customer_number

, customer_name

, customer_street_address

, customer_zip_code

, customer_city

, customer_state )

;

 

INSERT INTO customer_dim

SELECT

  NULL

, customer_number

, customer_name

, customer_street_address

, customer_zip_code

, customer_city

, customer_state

, '2005-03-01'

, '9999-12-31'

FROM

customer_stg

;

 

LOAD DATA INFILE 'product.txt'

INTO TABLE product_stg

FIELDS TERMINATED BY ''

OPTIONALLY ENCLOSED BY ''

LINES TERMINATED BY '\r\n'

IGNORE 1 LINES

( product_code

, product_name

, product_category )

;

 

INSERT INTO product_dim

SELECT

  NULL

, product_code

, product_name

, product_category

, '2005-03-01'

, '9999-12-31'

FROM

product_stg

;

 

INSERT INTO order_dim

SELECT

  NULL

, order_number

, order_date

, '9999-12-31'

FROM

source.sales_order

WHERE order_date >= '2005-03-01'

AND order_date < '2007-02-28'

;

 

INSERT INTO sales_order_fact

SELECT

  order_sk

, customer_sk

, product_sk

, date_sk

, order_amount

FROM

  source.sales_order a

, order_dim b

, customer_dim c

, product_dim d

, date_dim e

WHERE

    a.order_number = b.order_number

AND a.customer_number = c.customer_number

AND a.product_code = d.product_code

AND a.order_date = e.date

AND order_date >= '2005-03-01'

AND order_date < '2007-02-28'

;

 

/* end of script                 

阅读(1582) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~