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

全部博文(31)

文章存档

2008年(31)

我的朋友

分类: Mysql/postgreSQL

2008-07-15 16:20:38

执行按需装载

       在本节,我将用一个销售促销作为例子来向你展示,如何执行按需装载。实际上,该装载所作的就是, 如果该日期在计划预定的促销期间内,设置date_dim表中相应记录的promo_ind字段值为”Y”

       本例子的按需装载脚本由列表11-2所表示。你可以在日期被载入后运行该脚本。换句话说,所有促销计划,从开始到结束的所有日期在日期维中必须是可用的。

列表11-2:装载促销指示

/*****************************************************************/
/*                                                               */
/* on_demand.sql                                                 
/*                                                               */
/*****************************************************************/
 
USE dw;
 
TRUNCATE promo_schedule_stg;
 
LOAD DATA INFILE 'promo_schedule.csv'
INTO TABLE promo_schedule_stg
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
( promo_code
, promo_name
, promo_start_date
, promo_last_date )
;
 
UPDATE
  date_dim a
, promo_schedule_stg b
SET a.promo_ind = 'Y'
WHERE
    a.date >= b.promo_start_date
AND a.date <= b.promo_last_date
;
 
/* end of script                                                 */
 

列表 11-2中的脚本将promo_schedule.csv的内容载入到promo_schedule_stg表中,因此在你可以运行列表 11-2中的脚本之前,你需要建立promo_schedule_stg表。列表11-3中的脚本可以用来建立这个表。

       注:promo_schedule.csv文件将在下一节讨论。

列表11-3: 建立promo_schedule_stg:

/*****************************************************************/
/*                                                               */
/* create_promo_schedule_stg.sql                                 */
/*                                                               */
/*****************************************************************/
 
USE dw;
 
CREATE TABLE promo_schedule_stg (
  promo_code CHAR (2)
, promo_name CHAR (30)
, promo_start_date DATE
, promo_last_date DATE
)
;
/* end of script                                                 */

用如下命令运行列表11-3中的脚本

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

你可以看到如下的响应:

Database changed
Query OK, 0 rows affected (0.20 sec)
 

测试

       在你运行列表11-2之前,你需要准备如下的促销计划csv文件并存为promo_schedule.csv

PROMOTION CODE,PROMOTION NAME,START DATE, LAST DATE

SO,Special Offer,2007-04-01,2007-04-10

DP,Disk Promotion,2007-05-05,2007-05-20

MS,Month Special,2007-06-01,2007-06-30

MS,Monitor Promotion,2007-07-10,2007-07-15

BS,Back to School,2007-08-10,2007-08-30

       注:这里有83个促销日期在5个促销期间内。第一个期间有10个日期(2005-04-01, 2005-04-02,…2005-04-10, 第二个期间有16个日期(2005-05-05,2005-05-062005-05-20),等等。

       你可以用如下命令运行列表11-2中的on_demand.sql脚本。

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

这里是mysql控制台的回应。

Database changed
Query OK, 1 row affected (0.05 sec)
Query OK, 5 rows affected (0.06 sec)
Records: 5  Deleted: 0  Skipped: 0  Warnings: 0
Query OK, 83 rows affected (0.08 sec)
Rows matched: 83  Changed: 83  Warnings: 0

你可以通过查询date_dim表中的促销日期来确认执行的结果(促销指示被设置为”Y”)。例如,第一个促销期间的查询将显示10个日期,它们的promo_ind字段的值都是”Y”:

mysql> select * from date_dim where date >= '2007-04-01' and
    -> date <= '2007-04-10' \G

结果如下:

*************************** 1. row ***************************

       date_sk: 762

          date: 2007-04-01

    month_name: April

         month: 4

       quarter: 2

          year: 2007

     promo_ind: Y

effective_date: 0000-00-00

   expiry_date: 9999-12-31

*************************** 2. row ***************************

       date_sk: 763

          date: 2007-04-02

    month_name: April

         month: 4

       quarter: 2

          year: 2007

     promo_ind: Y

effective_date: 0000-00-00

   expiry_date: 9999-12-31

*************************** 3. row ***************************

       date_sk: 764

          date: 2007-04-03

    month_name: April

         month: 4

       quarter: 2

          year: 2007

     promo_ind: Y

effective_date: 0000-00-00

   expiry_date: 9999-12-31

*************************** 4. row ***************************

       date_sk: 765

          date: 2007-04-04

    month_name: April

         month: 4

       quarter: 2

          year: 2007

     promo_ind: Y

effective_date: 0000-00-00

   expiry_date: 9999-12-31

*************************** 5. row ***************************

       date_sk: 766

          date: 2007-04-05

    month_name: April

         month: 4

       quarter: 2

          year: 2007

     promo_ind: Y

effective_date: 0000-00-00

   expiry_date: 9999-12-31

*************************** 6. row ***************************

       date_sk: 767

          date: 2007-04-06

    month_name: April

         month: 4

       quarter: 2

          year: 2007

     promo_ind: Y

effective_date: 0000-00-00

   expiry_date: 9999-12-31

*************************** 7. row ***************************

       date_sk: 768

          date: 2007-04-07

    month_name: April

         month: 4

       quarter: 2

          year: 2007

     promo_ind: Y

effective_date: 0000-00-00

   expiry_date: 9999-12-31

*************************** 8. row ***************************

       date sk: 769

           date: 2007-04-08

    month_name : April

          month: 4

       quarter : 2

          year : 2007

      promo_ind: Y

effective_date : 0000-00-00

    expiry_date: 9999-12-31

*************************** 9. row ***************************

        date_sk: 770

           date: 2007-04-09

    month_name : April

         month : 4

       quarter : 2

          year : 2007

      promo_ind: Y

effective_date : 0000-00-00

    expiry_date: 9999-12-31

*************************** 10. row ***************************

        date_sk: 771

           date: 2007-04-10

    month_name : April

          month: 4

       quarter : 2

          year : 2007

      promo_ind: Y

effective_date : 0000-00-00

    expiry_date: 9999-12-31

 10 rows in set (0.01 sec)

 

小结

       本章,你学习了按需装载技术,你可以用它来作为定期装载的补充。对于现有数据仓库的一些扩展,你的客户可能不希望增加任何新的东西,你必须只能对现有的实现重复利用。下一章,你将学习如何重复利用维。
阅读(1503) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~