前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >维度模型数据仓库(七) —— 按需装载

维度模型数据仓库(七) —— 按需装载

作者头像
用户1148526
发布2022-12-02 14:11:30
3920
发布2022-12-02 14:11:30
举报
文章被收录于专栏:Hadoop数据仓库Hadoop数据仓库

(五)进阶技术         2. 按需装载         前面已经做了“初始装载”和“定期装载”。还有一种需要熟悉的装载类型,按需装载。所谓“按需装载”指的是,在正常调度之外,当源数据有效时或者数据仓库需要时进行装载。例如,促销销售源数据只有在促销期内有效,而在其它时间是无效的。         在“准备数据仓库模拟环境”中讨论的“生成日期维度数据”可以看做是一种按需装载。数据仓库预先装载了日期,当日期用完时,需要再次运行预装载。         本篇的主题是按需装载,首先修改数据库模式,然后在dw数据库上执行按需装载。使用促销期场景进行说明。定期装载不适合促销期场景,因为促销期数据并不是按调度装载。下面是需要装载的促销期内容,存储在名为一个promo_schedule.csv的CSV平面文件中。 PROMOTION CODE,PROMOTION NAME,START DATE,LAST DATE SO,Special Offer,2015-04-01,2015-04-10 DP,Disk Promotion,2015-05-05,2015-05-20 MS,Month Special,2015-06-01,2015-06-30 MS,Monitor Promotion,2015-07-10,2015-07-15 BS,Back to School,2015-08-10,2015-08-30         注意源数据提供了促销周期,而不是单个的促销日期。示例假设只需要装载今后新的促销数据,而在数据仓库中不需要促销期的历史数据。         修改数据库模式         图(五)- 2-1 显示了修改后的模式,date_dim表增加了promo_ind列,用来标识该日期是否为促销日期。使用清单(五)-2-1里的SQL脚本修改数据库模式。脚本中还建立了一个促销过渡表,用来装载促销期CSV文件的内容。

图(五)- 2-1

代码语言:javascript
复制
USE dw;

TRUNCATE promo_schedule_stg;
LOAD DATA INFILE '/root/data-integration/promo_schedule.csv'
INTO TABLE promo_schedule_stg
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\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 ;

COMMIT ;

清单(五)-2-1

        清单(五)-2-2里是执行按需装载SQL脚本。需要在日期装载后运行该脚本,换句话说,所有促销期内从开始到结束的日期,在日期维度里都是存在的。实际上装载所做的就是,如果一个日期在一个促销期内,则设置date_dim表的promo_ind列为‘Y’。         使用Kettle步骤装载促销期很容易,不需要使用过渡表,只要三个步骤即可,如图(五)- 2-2到(五)- 2-7所示。

代码语言:javascript
复制
USE dw;

TRUNCATE promo_schedule_stg;
LOAD DATA INFILE '/root/data-integration/promo_schedule.csv'
INTO TABLE promo_schedule_stg
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\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 ;

COMMIT ;

清单(五)-2-2

图(五)- 2-2

图(五)- 2-3

图(五)- 2-4

图(五)- 2-5

图(五)- 2-6

图(五)- 2-7

假设转换名称是on_demand,用以下命令执行转换: cd /root/data-integration ./pan.sh -rep kettle -user admin -pass admin -dir / -trans on_demand -level=basic > on_demand.log 验证结果应该如下所示: mysql> select * from date_dim where date >= '2015-04-01' and date <= '2015-04-10'; +---------+------------+------------+-------+---------+------+-----------+----------------+-------------+ | date_sk | date       | month_name | month | quarter | year | promo_ind | effective_date | expiry_date | +---------+------------+------------+-------+---------+------+-----------+----------------+-------------+ |    5570 | 2015-04-01 | April      |     4 |       2 | 2015 | Y         | 0000-00-00     | 9999-12-31  | |    5571 | 2015-04-02 | April      |     4 |       2 | 2015 | Y         | 0000-00-00     | 9999-12-31  | |    5572 | 2015-04-03 | April      |     4 |       2 | 2015 | Y         | 0000-00-00     | 9999-12-31  | |    5573 | 2015-04-04 | April      |     4 |       2 | 2015 | Y         | 0000-00-00     | 9999-12-31  | |    5574 | 2015-04-05 | April      |     4 |       2 | 2015 | Y         | 0000-00-00     | 9999-12-31  | |    5575 | 2015-04-06 | April      |     4 |       2 | 2015 | Y         | 0000-00-00     | 9999-12-31  | |    5576 | 2015-04-07 | April      |     4 |       2 | 2015 | Y         | 0000-00-00     | 9999-12-31  | |    5577 | 2015-04-08 | April      |     4 |       2 | 2015 | Y         | 0000-00-00     | 9999-12-31  | |    5578 | 2015-04-09 | April      |     4 |       2 | 2015 | Y         | 0000-00-00     | 9999-12-31  | |    5579 | 2015-04-10 | April      |     4 |       2 | 2015 | Y         | 0000-00-00     | 9999-12-31  | +---------+------------+------------+-------+---------+------+-----------+----------------+-------------+ 10 rows in set (0.10 sec)         在五个促销期里有共有83的促销日。第一个周期有10天(2015年4月1日、2015年4月2日;…2015年4月10日),第二个促销周期有16天(2015年5月5日,2015年5月6日;…2015年5月20日),等等。查询第一个周期应该有10天的promo_ind列上具有Y值。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-11-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档