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,
DP,Disk Promotion,
MS,Month Special,
MS,Monitor Promotion,
BS,Back to School,
注:这里有83个促销日期在5个促销期间内。第一个期间有10个日期(
你可以用如下命令运行列表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:
month_name: April
month: 4
quarter: 2
year: 2007
promo_ind: Y
effective_date: 0000-00-00
expiry_date:
*************************** 2. row ***************************
date_sk: 763
date:
month_name: April
month: 4
quarter: 2
year: 2007
promo_ind: Y
effective_date: 0000-00-00
expiry_date:
*************************** 3. row ***************************
date_sk: 764
date:
month_name: April
month: 4
quarter: 2
year: 2007
promo_ind: Y
effective_date: 0000-00-00
expiry_date:
*************************** 4. row ***************************
date_sk: 765
date:
month_name: April
month: 4
quarter: 2
year: 2007
promo_ind: Y
effective_date: 0000-00-00
expiry_date:
*************************** 5. row ***************************
date_sk: 766
date:
month_name: April
month: 4
quarter: 2
year: 2007
promo_ind: Y
effective_date: 0000-00-00
expiry_date:
*************************** 6. row ***************************
date_sk: 767
date:
month_name: April
month: 4
quarter: 2
year: 2007
promo_ind: Y
effective_date: 0000-00-00
expiry_date:
*************************** 7. row ***************************
date_sk: 768
date:
month_name: April
month: 4
quarter: 2
year: 2007
promo_ind: Y
effective_date: 0000-00-00
expiry_date:
*************************** 8. row ***************************
date sk: 769
date:
month_name : April
month: 4
quarter : 2
year : 2007
promo_ind: Y
effective_date : 0000-00-00
expiry_date:
*************************** 9. row ***************************
date_sk: 770
date:
month_name : April
month : 4
quarter : 2
year : 2007
promo_ind: Y
effective_date : 0000-00-00
expiry_date:
*************************** 10. row ***************************
date_sk: 771
date:
month_name : April
month: 4
quarter : 2
year : 2007
promo_ind: Y
effective_date : 0000-00-00
expiry_date:
10 rows in set (0.01 sec)
小结