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

全部博文(31)

文章存档

2008年(31)

我的朋友

分类: Mysql/postgreSQL

2008-04-22 10:57:34

执行初始化载入脚本

       在你运行列表7-1所示的初始化载入脚本之前,你需要完成下面的几个步骤:

u      清空所有的表,包括中间过程表。

u      预装载日期维

u      准备客户和产品测试数据

u      在源数据库中产生测试数据

这些步骤将在下面的子节中讨论。

清空表

用列表7-2的脚本清空所有的表。

列表7-2:截去所有表的脚本

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

/*                                                               */

/* truncate_tables.sql                                           */

/*                                                               */

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

USE dw;

 

TRUNCATE customer_dim;

TRUNCATE product_dim;

TRUNCATE order_dim;

TRUNCATE date_dim;

TRUNCATE sales_order_fact;

TRUNCATE customer_stg;

TRUNCATE product_stg;

 

USE source;

 

TRUNCATE sales_order;

 

/* end of script 

你可以调用以下命令运行列表7-2的脚本。

mysql> \. c:\mysql\scripts\truncate_tables.sql

mysql数据库将回应你每个表各有多少记录被删除。

Database changed

Query OK, 7 rows affected (0.17 sec)

 

Query OK, 4 rows affected (0.05 sec)

 

Query OK, 20 rows affected (0.06 sec)

 

Query OK, 5 rows affected (0.06 sec)

 

Query OK, 20 rows affected (0.05 sec)

 

Query OK, 7 rows affected (0.06 sec)

 

Query OK, 3 rows affected (0.06 sec)

 

Database changed

Query OK, 8 rows affected (0.07 sec)

 

预装载日期维

       一旦表清空了,你可以通过运行我们曾在第6章“装载日期维”中讨论过的pre_populate_date存储过程,向日期维预装载从2005-03-012010-12-31这个期间的日期数据。通过调用下面命令来确保当前的数据库是dw

mysql> use dw;

然后调用存储过程,传入开始日期和结束日期作为参数。

mysql> call pre_populate_date ('2005-03-01', '2010-12-31');

 

准备客户和产品测试数据

       在装载date_dim表后的第二个步骤是准备客户和产品的测试数据。我已经用一个csv格式的文件准备了客户数据,在一个固定宽度格式的文件中准备产品数据。

       下面是客户资料源数据:

CUSTOMER NO,CUSTOMER NAME,STREET ADDRESS,ZIP CODE,CITY,STATE

1,Really Large Customers, 7500 Louise Dr.,17050, Mechanicsburg,PA

2,Small Stores, 2500 Woodland St.,17055, Pittsburgh,PA

3,Medium Retailers,1111 Ritter Rd.,17055,Pittsburgh,PA

4,Good Companies,9500 Scott St.,17050,Mechanicsburg,PA

5,Wonderful Shops,3333 Rossmoyne Rd.,17050,Mechanicsburg,PA

6,Loyal Clients,7070 Ritter Rd.,17055,Pittsburgh,PA

7,Distinguished Partners,9999 Scott St.,17050,Mechanicsburg,PA

下面是产品数据

PRODUCT CODE,PRODUCT NAME,PRODUCT GROUP

1          Hard Disk Drive               Storage

2          Floppy Drive                  Storage

3          LCD Panel                     Monitor

 

准备销售订单数据

       你所需要的最后一组测试数据是销售订单。列表7-3的脚本能够被用来向source数据库中的sales_order表插入21条销售订单。

列表7-3:测试初始化装载的销售订单

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

/*                                                               */

/* sales_order_initial.sql                                       */

/*                                                               */

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

USE source;

 

INSERT INTO sales_order VALUES

  (1, 1, 1, '2005-02-01', '2005-02-01', 1000)

, (2, 2, 2, '2005-02-10', '2005-02-10', 1000)

, (3, 3, 3, '2005-03-01', '2005-03-01', 4000)

, (4, 4/ 1, '2005-04-15', '2005-04-15', 4000)

, (5, 5, 2, '2005-05-20', '2005-05-20', 6000)

, (6, 6, 3, '2005-07-30', '2005-07-30', 6000)

, (7, 7, 1, '2005-09-01', '2005-09-01', 8000)

, (8, 1, 2, '2005-11-10', '2005-11-10', 8000)

, (9, 2, 3, '2006-01-05', '2006-01-05', 1000)

, (10, 3, 1, '2006-02-10', '2006-02-10', 1000)

, (11, 4, 2, '2006-03-15', '2006-03-15', 2000)

, (12, 5, 3, '2006-04-20', '2006-04-20', 2500)

, (13, 6, 1, '2006-05-30', '2006-05-30', 3000)

, (14, 7, 2, '2006-06-01', '2006-06-01', 3500)

, (15, 1, 3, '2006-07-15', '2006-07-15', 4000)

, (16, 2, 1, '2006-08-30', '2006-08-30', 4500)

, (17, 3, 2, '2006-09-05', '2006-09-05', 1000)

, (18, 4, 3, '2006-10-05', '2006-10-05', 1000)

, (19, 5, 1, '2007-01-10', '2007-01-10', 4000)

, (20, 6, 2, '2007-02-20', '2007-02-20', 4000)

, (21, 7, 3, '2007-02-28', '2007-02-28', 4000)

;

 

/* end of script                                                 */

现在用下面的命令方式运行sales_order_initial.sql脚本

mysql> \. c:\mysql\scripts\sales_order_initial.sql

你将看到21条新的记录被插入到数据库中

Database changed

Query OK, 21 rows affected (0.05 sec)

Records: 21  Duplicates: 0  Warnings: 0

       注意历史数据从2005-03-01开始载入,所以开始的两个订单将不会被载入。

 

运行和确认初始化装载

       现在测试数据已经准备好,是时候执行初始化装载了。但是,首先要作的是设置你的mysql数据库时间是2007-02-28,这是你的数据仓库开始运作的前一天。你运行初始化脚本在这天结束的时候,即再也没有新的数据可以获得并且源数据库已经准备好了。

你现在已经准备好测试初始化装载了。用下面的命令方式运行列表7-1所示的装载脚本dw_initial.sql

mysql> \. c:\mysql\scripts\dw_initial.sql

       在你的控制台上,将看到下面的信息:

Database changed

Query OK, 7 rows affected (0.06 sec)

Records: 7  Deleted: 0  Skipped: 0 Warnings: 0

 

Query OK, 7 rows affected (0.06 sec)

Records: 7  Duplicates: 0  Warnings: 0

 

Query OK, 3 rows affected (0.06 sec)

Records: 3  Deleted: 0  Skipped: 0  Warnings: 0

 

Query OK, 3 rows affected (0.07 sec)

Records: 3  Duplicates: 0  Warnings: 0

 

Query OK, 19 rows affected (0.06 sec)

Records: 19  Duplicates: 0  Warnings: 0

 

Query OK, 19 rows affected (0.10 sec)

Records: 19  Duplicates: 0  Warnings: 0

你可以用列表7-4所示的查询语句来检查19条销售订单记录被正确的载入。

列表7-4  通过查询确认销售订单被准确的载入

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

/*                                                               */

/* confirm_initial_population.sql                                */

/*                                                               */

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

USE dw;

 

SELECT

  order_number on

, customer_name

, product_name

, date

, order_amount amount

FROM

  sales_order_fact a

, customer_dim b

, product_dim c

, order_dim d

, date_dim e

WHERE

    a.customer_sk = b.customer_sk

AND a.product_sk = c.product_sk

AND a.order_sk = d.order_sk

AND a.order date sk = e.date_sk

;

 

/* end of script    */

用下面的命令方式运行列表7-4脚本。

mysql> \. c:\mysql\scripts\confirm_initial_population.sql

结果如下所示

Database changed
+--+------------------------+-----------------+-----------+---------+
|no| customer_name          | product _name   | date      | amount  |
+--+------------------------+-----------------+-----------+---------+
| 3| Medium Retailers       | LCD Panel       | 2005-03-01| 4000.00 |
| 4| Good Companies         | Hard Disk Drive | 2005-04-15| 4000.00 |
| 5| Wonderful Shops        | Floppy Drive    | 2005-05-20| 6000.00 |
| 6| Loyal Clients LCD      | Panel           | 2005-07-30| 6000.00 |
| 7| Distinguished Partners | Hard Disk Drive | 2005-09-01| 8000.00 |
| 8| Really Large Customers | Floppy Drive    | 2005-11-10| 8000.00 |
| 9| Small Stores           | LCD Panel       | 2006-01-05| 1000.00 |
|10| Medium Retailers       | Hard Disk Drive | 2006-02-10| 1000.00 |
|11| Good Companies         | Floppy Drive    | 2006-03-15| 2000.00 |
|12| Wonderful Shops        | LCD Panel       | 2006-04-20| 2500.00 |
|13| Loyal Clients          | Hard Disk Drive | 2006-05-30| 3000.00 |
|14| Distinguished Partners | Floppy Drive    | 2006-06-01| 3500.00 |
|15| Really Large Customers | LCD Panel       | 2006-07-15| 4000.00 |
|16| Small Stores           | Hard Disk Drive | 2006-08-30| 4500.00 |
|17| Medium Retailers       | Floppy Drive    | 2006-09-05| 1000.00 |
|18| Good Companies         | LCD Panel       | 2006-10-05| 1000.00 |
|19| Wonderful Shops        | Hard Disk Drive | 2007-01-10| 4000.00 |
|20| Loyal Clients          | Floppy Drive    | 2007-02-20| 4000.00 |
|21| Distinguished Partners | LCD Panel       | 2007-02-28| 4000.00 |
+--+------------------------+-----------------+-----------+---------+
19 rows in set (0.00 sec)
 

小结

       本章你将学习到源数据映射以及被称为初始化装载的过程,来根据你的用户要求载入历史数据。下一章,你将学习到你运作数据仓库所必须的定期装载。

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