第8章 综合案例—构建DVD租赁商店数据仓库

2024-03-24 18:40

本文主要是介绍第8章 综合案例—构建DVD租赁商店数据仓库,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

案例背景结束:
对于在线DVD租赁商店的决策者来说,他们需要从多个不同的商业角度观察数据,例如时间、电影、演员、用户等角度观察数据,并进行相关的分析得出决策,但是数据库中的数据不适合从多个角度进行分析,无法得出战略决策。然而,数据仓库支持复杂的分析操作,侧重于决策支持,并且还提供直观易懂的查询结果,因此我们需要基于数据库sakila创建一个DVD租赁商店数据仓库,并将sakila数据库中的数据加载到数据仓库中,便于在线DVD租赁商店的决策者对数据进行分析得出商业决策。

数据下载:
我们可以从MySQL的官网下载数据库sakila的建库脚本,若是在Windows环境下安装数据库sakila,则下载名称为sakila-db.zip的压缩包文件;若是在Linux环境下安装数据库sakila,需要下载名称为sakila-db.tar.gz的压缩包文件。
本书下载的是名称为sakila-db.zip的压缩包文件,该压缩包文件中包含三个文件,分别是文件sakila.mwb、文件sakila-data.sql和文件sakila-schema.sql。其中,文件sakila.mwb是一个MySQL Workbench数据模型,用于查看数据库结构;文件sakila-data.sql是用于创建数据库sakila的数据;文件sakila-schema.sql是用于创建数据库sakila的数据结构。

数据库介绍
数据库sakila中一共含有十六张数据表,分别是actor(演员)表、address(地址)表、category(类别)表、city(城市)表、country(国家)表、customer(顾客)表、film(电影)表、film_actor(演员所属电影)表、film_category(电影所属的类别)表、film_text(电影描述)表、inventory(库存)表、language(语言)表、payment(付款)表、rental(租赁)表、staff(工作人员)表以及store(商店)表。
数据表关系:
在这里插入图片描述
数据表字段介绍
数据表film:
用于储存电影基本信息及相关介绍的数据,该数据表各个字段的含义如表。
在这里插入图片描述在这里插入图片描述
数据表file_category:
用于储存定义电影id所属电影类别id的数据,该数据表各个字段的含义如表。
在这里插入图片描述
数据表category
用于储存电影类别名称所属类别id的数据,该数据表各个字段的含义如表。
在这里插入图片描述
数据表film_actor
用于储存定义演员id所属电影id的数据,该数据表各个字段的含义如表。
在这里插入图片描述
数据表actor
用于储存演员id对应的姓和名字数据,该数据表各个字段的含义如表。
在这里插入图片描述
数据表language
用于储存电影语言id对应的语言名称数据,该数据表各个字段的含义如表。
在这里插入图片描述
数据表film_text
用于储存电影id对应的电影名及描述的数据,该数据表各个字段的含义如表。
在这里插入图片描述
数据表store
用于储存商店id对应管理人员id和商店地址id数据,该数据表各个字段含义如表。
在这里插入图片描述
数据表staff
用于储存员工的基本信息及员工所属商店的数据,该数据表各个字段的含义如表。
在这里插入图片描述
在这里插入图片描述
数据表inventory
用于储存库存编号对应的电影id和商店id数据,该数据表各个字段的含义如表。
在这里插入图片描述
数据表customer
用于储存顾客的基本信息数据,该数据表各个字段的含义如表。
在这里插入图片描述
在这里插入图片描述
数据表rental
用于储存租借相关信息数据,该数据表各个字段的含义如表。
在这里插入图片描述
数据表payment
用于储存租赁时付款的相关信息,该数据表各个字段的含义如表。
在这里插入图片描述
数据表country
用于储存国家id对应的国家名称数据,该数据表各个字段的含义如表。
在这里插入图片描述
数据表city
用于储存城市id对应的城市名称以及所属国家id这一类数据,该数据表各个
字段的含义如表。
在这里插入图片描述
数据表address
用于储存城市地址及地址邮编、所属区域等相关信息,该数据表各字段含义如表。
在这里插入图片描述
构建数据仓库
我们基于数据库sakila构建一个星型模型的DVD租赁商店数据仓库,并命名为sakila_dw。数据仓库sakila_dw中的事实表fact_rental是根据数据库sakila中的数据表rental创建的;维度表是根据数据表sakila中数据表的分类创建的,即从人员、时间、地点以及事件四个角度进行创建数据仓库sakila_dw的维度表,具体如下:
1、从人员角度角度创建维度表dim_customer和维度表dim_staff,分别表示租赁业务中的客户和员工;
2、从时间角度创建维度表dim_date和维度表dim_time,用于记录所有DVD的租赁时间和归还时间;
3、从地点角度创建维度表dim_store,用于记录DVD光盘是从哪个商店租赁的;
4、从事件角度创建维度表dim_actor和维度表dim_film,其中维度表dim_actor用于记录演员的基本信息,维度表dim_film用于记录电影的基本信息。由于电影是租赁和归还的实际对象,因此维度表dim_film应与事实表fact_rental关联。一部电影是由多位演员出演,所以会有桥接表dim_film_actor_bridge,该表将电影与演员相关联。

一、通过Kettle工具加载日期数据至dim_date日期维度表。
组件准备
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
表输出的数据库字段是关键,选择获取字段,然后删去一些数据库中没有的字段,这时候可能还有错,按照日记提示,修改掉匹配错误的字段
在这里插入图片描述
结果:
在这里插入图片描述

在这里插入图片描述

二、通过Kettle工具加载时间数据至日期维度表dim_time。

选择组件,构成转换
在这里插入图片描述
在生成记录中,将限制设为24,表示生成24小时的记录

增加序列中,将值的名称改为hours24 每一列增加1
在这里插入图片描述
在JavaScript代码中输入以下代码将24小时的12小时制表示出来,并选择获取变量

//Script here
//生成12小时格式
var hours12=hours24.getInteger()%12;
//生成AM。PM格式
var am_pm=hours24.getInteger()>12?"PM":"AM";

在这里插入图片描述
生成记录二中,生成的是代表分钟的序列:
在这里插入图片描述
增加序列二中,把分钟0~59分钟表示了出来:
在这里插入图片描述
生成记录三,生成秒,生成60秒的记录
在这里插入图片描述
增加序列三,把秒对应的0~59秒表示出来
在这里插入图片描述
记录关联:不需要配置,它会自动将1小时对应60分钟,1分钟对应60秒关联对应起来
会得到:
在这里插入图片描述
JavaScript代码2:输入代码获取time字段和timekey:

//Script here
//生成time
var time = hours24.getInteger() + ":" + minutes.getInteger() + ":" + seconds.getInteger();
//time_key
var time_key = (hours24.getInteger()<10?"0":"")+hours24.getInteger()+(minutes.getInteger()<10?"0":"")+minutes.getInteger()+(seconds.getInteger()<10?"0":"")+seconds.getInteger();

配置表输出:
在这里插入图片描述
结果:
在这里插入图片描述
三、通过Kettle工具加载员工数据至员工维度表dim_staff。
选择好组件,配置转换
在这里插入图片描述
在SQL框中编写SQL语句,用于获取字段staff_last_update中的最大值,将该值替换为”1970-01-01 00:00:00”并赋值给临时字段max_dim_staff_last_update;单击“预览”按钮,查看临时字段max_dim_staff_last_update是否将默认值设置为“1970-01-01 00:00:00”,如图所示。
在这里插入图片描述
表输入二,获取staff中的数据
在这里插入图片描述
字段选择中,修改active的类型
在这里插入图片描述
值映射中,将Y对应yes,N对应NO
在这里插入图片描述
维度查询/更新:
单击目标表右侧的【浏览】按钮,选择输出的目标表,即维度表dim_staff;在“关键字”选项卡处添加关键字字段staff_id,用于指定维度表字段和值映射控件流中字段的比较条件,若维度表中的数据有更新,则通过字段staff_id进行更新操作;在“字段”选项卡处添加查询/更新字段,用于更新目标维度表中的字段数据;在“代理关键字段”处的下拉框中选择staff_key为代理关键字段,并指定“创建代理键”是使用自增字段;在“Version字段”处的下拉框中选择staff_version_number;在“Stream日期字段”处的下拉框中选择last_update;在“开始日期字段”处的下拉框中选择staff_valid_from;在“截止日期字段”处的下拉框中选择staff_valid_through,如图所示(见下页)。
在这里插入图片描述
结果:
在这里插入图片描述

四、通过Kettle工具加载用户数据至用户维度表dim_customer。
配置组件,构成转换:
在这里插入图片描述
在SQL框中编写用于获取字段customer_last_update中的最大值,将该值替换为”1970-01-01 00:00:00”并赋值给临时字段max_dim_customer_last_update;单击“预览”按钮,查看临时字段max_dim_customer_last_update是否将默认值设置为“1970-01-01 00:00:00”,如图所示。在这里插入图片描述
在表输入2中获取customer的数据
按如下所示配置:
在这里插入图片描述
创建一个转换fetch_address:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在load_dim_customer中的映射(子转换)中,将fetch_address浏览进去
在这里插入图片描述
修改active的字段类型
在这里插入图片描述
改值映射
在这里插入图片描述
更新:
在这里插入图片描述
结果:
在这里插入图片描述
在这里插入图片描述
五、通过Kettle工具加载商店数据至商店维度表dim_store。
获取组件,构成转换:
在这里插入图片描述
配置表输入,在创建了数据库连接之后,在SQL框中编写SQL语句,用于获取字段store_last_update中的最大值,将该值替换为”1970-01-01 00:00:00”并赋值给临时字段max_dim_store_last_update;单击“预览”按钮,查看临时字段max_dim_store_last_update是否将默认值设置为“1970-01-01 00:00:00” ,如图所示。
在这里插入图片描述
表输入2,获取store数据
在这里插入图片描述
映射(子转化),使用的子转换还是fetch_address
在这里插入图片描述
数据库查询:
单击表名右侧的【浏览】按钮,添加staff数据表,用于查询商店员工的信息;在“查询所需的关键字”框中,添加查询所需的关键字staff_id,用于指定表字段和流字段的比较条件;在“查询表返回的值”框中,添加查询表返回的值,即员工姓名,如图所示。
在这里插入图片描述
维度更新:
单击【浏览】按钮,选择输出的目标表,即维度表dim_store;在“关键字”选项卡处添加关键字字段store_id,用于指定维度表字段和流字段的比较条件;在“字段”选项卡处添加查询/更新字段,用于指定维度表字段store_id和流字段store_id数据一致需要更新的字段,;在“代理关键字段”处的下拉框中选择store_key为代理关键字段,并指定“创建代理键”是使用自增字段;在“Version字段”处的下拉框中选择store_version_number;在“Stream日期字段”处的下拉框中选择last_update;在“开始日期字段”处的下拉框中选择store_valid_from;在“截止日期字段”处的下拉框中选择store_valid_through,如图所示。
在这里插入图片描述
结果:
在这里插入图片描述
在这里插入图片描述
六、通过Kettle工具加载演员数据至演员维度表dim_actor。
获取组件,构建转换:
在这里插入图片描述
表输入:在创建了数据库连接之后
在SQL框中编写SQL语句,用于获取字段actor_last_update中的最大值,将该值替换为”1970-01-01 00:00:00”并赋值给临时字段max_dim_actor_last_update;单击“预览”按钮,查看临时字段max_dim_actor_last_update是否将默认值设置为“1970-01-01 00:00:00”,如图所示。
在这里插入图片描述
表输入2中获取表actor中的数据:
在这里插入图片描述
插入/更新:单击【获取字段】按钮,用来指定查询数据所需要的关键字,这里选择的是dim_actor数据表中的actor_id字段和输入流里面的actor_id字段;单击【获取和更新字段】按钮,用来指定需要更新的字段,如图所示。
在这里插入图片描述
结果:
在这里插入图片描述
在这里插入图片描述
七、通过Kettle工具加载电影数据至电影维度表dim_film。
获取组件,创建转换
在这里插入图片描述
组件配置如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
结果:
在这里插入图片描述
在这里插入图片描述
八、通过Kettle工具加载租赁数据至租赁事实表fact_rental。
获取组件,构建转换:
在这里插入图片描述
组件配置如下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
结果:
在这里插入图片描述
在这里插入图片描述
创建一个作业load_rentals,并添加Start控件、转换控件、发送邮件控件、中止作业控件以及Hop作业项连接线,如图所示
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

这篇关于第8章 综合案例—构建DVD租赁商店数据仓库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/842441

相关文章

使用Python构建一个Hexo博客发布工具

《使用Python构建一个Hexo博客发布工具》虽然Hexo的命令行工具非常强大,但对于日常的博客撰写和发布过程,我总觉得缺少一个直观的图形界面来简化操作,下面我们就来看看如何使用Python构建一个... 目录引言Hexo博客系统简介设计需求技术选择代码实现主框架界面设计核心功能实现1. 发布文章2. 加

Python中使用正则表达式精准匹配IP地址的案例

《Python中使用正则表达式精准匹配IP地址的案例》Python的正则表达式(re模块)是完成这个任务的利器,但你知道怎么写才能准确匹配各种合法的IP地址吗,今天我们就来详细探讨这个问题,感兴趣的朋... 目录为什么需要IP正则表达式?IP地址的基本结构基础正则表达式写法精确匹配0-255的数字验证IP地

MySQL高级查询之JOIN、子查询、窗口函数实际案例

《MySQL高级查询之JOIN、子查询、窗口函数实际案例》:本文主要介绍MySQL高级查询之JOIN、子查询、窗口函数实际案例的相关资料,JOIN用于多表关联查询,子查询用于数据筛选和过滤,窗口函... 目录前言1. JOIN(连接查询)1.1 内连接(INNER JOIN)1.2 左连接(LEFT JOI

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

一文详解如何从零构建Spring Boot Starter并实现整合

《一文详解如何从零构建SpringBootStarter并实现整合》SpringBoot是一个开源的Java基础框架,用于创建独立、生产级的基于Spring框架的应用程序,:本文主要介绍如何从... 目录一、Spring Boot Starter的核心价值二、Starter项目创建全流程2.1 项目初始化(

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子

使用Python和python-pptx构建Markdown到PowerPoint转换器

《使用Python和python-pptx构建Markdown到PowerPoint转换器》在这篇博客中,我们将深入分析一个使用Python开发的应用程序,该程序可以将Markdown文件转换为Pow... 目录引言应用概述代码结构与分析1. 类定义与初始化2. 事件处理3. Markdown 处理4. 转

MySQL中实现多表查询的操作方法(配sql+实操图+案例巩固 通俗易懂版)

《MySQL中实现多表查询的操作方法(配sql+实操图+案例巩固通俗易懂版)》本文主要讲解了MySQL中的多表查询,包括子查询、笛卡尔积、自连接、多表查询的实现方法以及多列子查询等,通过实际例子和操... 目录复合查询1. 回顾查询基本操作group by 分组having1. 显示部门号为10的部门名,员

Java使用Mail构建邮件功能的完整指南

《Java使用Mail构建邮件功能的完整指南》JavaMailAPI是一个功能强大的工具,它可以帮助开发者轻松实现邮件的发送与接收功能,本文将介绍如何使用JavaMail发送和接收邮件,希望对大家有所... 目录1、简述2、主要特点3、发送样例3.1 发送纯文本邮件3.2 发送 html 邮件3.3 发送带

Python结合Flask框架构建一个简易的远程控制系统

《Python结合Flask框架构建一个简易的远程控制系统》这篇文章主要为大家详细介绍了如何使用Python与Flask框架构建一个简易的远程控制系统,能够远程执行操作命令(如关机、重启、锁屏等),还... 目录1.概述2.功能使用系统命令执行实时屏幕监控3. BUG修复过程1. Authorization