第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

相关文章

六个案例搞懂mysql间隙锁

《六个案例搞懂mysql间隙锁》MySQL中的间隙是指索引中两个索引键之间的空间,间隙锁用于防止范围查询期间的幻读,本文主要介绍了六个案例搞懂mysql间隙锁,具有一定的参考价值,感兴趣的可以了解一下... 目录概念解释间隙锁详解间隙锁触发条件间隙锁加锁规则案例演示案例一:唯一索引等值锁定存在的数据案例二:

基于Python构建一个高效词汇表

《基于Python构建一个高效词汇表》在自然语言处理(NLP)领域,构建高效的词汇表是文本预处理的关键步骤,本文将解析一个使用Python实现的n-gram词频统计工具,感兴趣的可以了解下... 目录一、项目背景与目标1.1 技术需求1.2 核心技术栈二、核心代码解析2.1 数据处理函数2.2 数据处理流程

Python FastMCP构建MCP服务端与客户端的详细步骤

《PythonFastMCP构建MCP服务端与客户端的详细步骤》MCP(Multi-ClientProtocol)是一种用于构建可扩展服务的通信协议框架,本文将使用FastMCP搭建一个支持St... 目录简介环境准备服务端实现(server.py)客户端实现(client.py)运行效果扩展方向常见问题结

详解如何使用Python构建从数据到文档的自动化工作流

《详解如何使用Python构建从数据到文档的自动化工作流》这篇文章将通过真实工作场景拆解,为大家展示如何用Python构建自动化工作流,让工具代替人力完成这些数字苦力活,感兴趣的小伙伴可以跟随小编一起... 目录一、Excel处理:从数据搬运工到智能分析师二、PDF处理:文档工厂的智能生产线三、邮件自动化:

MySQL 表的内外连接案例详解

《MySQL表的内外连接案例详解》本文给大家介绍MySQL表的内外连接,结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录表的内外连接(重点)内连接外连接表的内外连接(重点)内连接内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

Java Stream.reduce()方法操作实际案例讲解

《JavaStream.reduce()方法操作实际案例讲解》reduce是JavaStreamAPI中的一个核心操作,用于将流中的元素组合起来产生单个结果,:本文主要介绍JavaStream.... 目录一、reduce的基本概念1. 什么是reduce操作2. reduce方法的三种形式二、reduce

Spring Boot 整合 Redis 实现数据缓存案例详解

《SpringBoot整合Redis实现数据缓存案例详解》Springboot缓存,默认使用的是ConcurrentMap的方式来实现的,然而我们在项目中并不会这么使用,本文介绍SpringB... 目录1.添加 Maven 依赖2.配置Redis属性3.创建 redisCacheManager4.使用Sp

一文教你Java如何快速构建项目骨架

《一文教你Java如何快速构建项目骨架》在Java项目开发过程中,构建项目骨架是一项繁琐但又基础重要的工作,Java领域有许多代码生成工具可以帮助我们快速完成这一任务,下面就跟随小编一起来了解下... 目录一、代码生成工具概述常用 Java 代码生成工具简介代码生成工具的优势二、使用 MyBATis Gen

springboot项目redis缓存异常实战案例详解(提供解决方案)

《springboot项目redis缓存异常实战案例详解(提供解决方案)》redis基本上是高并发场景上会用到的一个高性能的key-value数据库,属于nosql类型,一般用作于缓存,一般是结合数据... 目录缓存异常实践案例缓存穿透问题缓存击穿问题(其中也解决了穿透问题)完整代码缓存异常实践案例Red