sakila数仓实战案例
以MySQL提供的Sakila样本数据库来搭建数据仓库
一、Sakila简介
MySQL Sakila样本数据库
二、MySQL服务器安装
Mysql(免安装版)安装、配置与卸载
MySQL:由于找不到VCRUNTIME140_1.dll,无法继续执行代码。重新安装程序可能会解决此问题
三、数仓理论知识
1、维度建模
2、处理维度表
缓慢变化维类型
1、类型一
对源系统的更新,也会直接更新目标维度表。维度表总是保存当前最新的状态,如果发生变化就直接覆盖。可以通过kettle的
“插入/更新”
步骤来实现。2、 类型二
对源系统的更新,会往目标维度表里插入一行数据,通过不同的时间戳来维护同一条维度数据的多个版本。在任何一个给定的时间点,都可以找到一行对应的维度数据,可以按照时间追踪到维度的变化。
3、类型三
对源系统的更新,会在目标维度表里增加列,在目标维度表同一行新增的列里保存新的数据。kettle里没有一个专用的步骤来支持,但是可以写一个作业并使用“表里面的列是否存在”
步骤来判断是否要更改表结构,然后使用“SQL脚本”
步骤,执行相应的DDL语句增加一个新列。
以上缓慢变化维类型的处理方式,在实际开发中使用最多的是类型二,类型三很少使用,需重点掌握类型一和类型二。
3、sakila数据仓库模型
以租赁业务为主题搭建如下星型模型
执行sakila_dwh_schema.sql文件,创建sakila_dwh数据仓库的库和表。
四、ETL开发
1、开发环境
源数据库
- database:sakila
- version:mysql-8.0.20
目标数据库
- database:sakila_dwh
- version:mysql-8.0.20
kettle
- version:pdi-ce-7.1.0.0-12
注意:kettle连接MySQL 8.0以上版本时,需要调整连接配置,请参考 关于 kettle 连接 mysql 的一些问题。
2、ETL设计过程
ETL数据流向:源(sakila)—> 目标(sakila_dwh)
类型 | 数据抽取方式 | 说明 |
---|---|---|
维度表 | 全量抽取/增量抽取 | 不删除任何数据 |
事实表 | 增量抽取 | 需要删除数据 |
load_dim_date
时间维度是一个静态维度类型,无需考虑维度属性的变化。
[load_dim_date.ktr](etl)
# 生成连续日期数据SELECTdate_format(t.date_value, '%Y%m%d') AS date_key,t.date_value,date_format(t.date_value, '%c/%e/%y') AS date_short,date_format(t.date_value, '%b %e, %Y') AS date_medium,date_format(t.date_value, '%M %e, %Y') AS date_long,date_format(t.date_value, '%W, %M %e, %Y') AS date_full,dayofyear(t.date_value) AS day_in_year,dayofmonth(t.date_value) AS day_in_month,CASE WHEN dayofmonth(t.date_value) = 1 THEN 1ELSE 0END AS is_first_day_in_month,CASE WHEN dayofmonth(ADDDATE(t.date_value, 1)) = 1 THEN 1ELSE 0END AS is_last_day_in_month,date_format(t.date_value, '%a') AS day_abbreviation,date_format(t.date_value, '%W') AS day_name,week(t.date_value, 3) AS week_in_year,(DAY(t.date_value)+WEEKDAY(t.date_value-INTERVAL DAY(t.date_value) DAY)) DIV 7 + 1 AS week_in_month,CASE WHEN weekday(t.date_value) = 0 THEN 1ELSE 0END AS is_first_day_in_week,CASE WHEN weekday(ADDDATE(t.date_value, 1)) = 0 THEN 1ELSE 0END AS is_last_day_in_week,month(t.date_value) AS month_number,date_format(t.date_value, '%b') AS month_abbreviation,date_format(t.date_value, '%M') AS month_name,date_format(t.date_value, '%y') AS year2,date_format(t.date_value, '%Y') AS year4,concat('Q', quarter(t.date_value)) AS quarter_name,quarter(t.date_value) AS quarter_number,concat(year(t.date_value), 'Q', quarter(t.date_value)) AS year_quarter,date_format(t.date_value, '%Y-%m') AS year_month_number,date_format(t.date_value, '%b %Y') AS year_month_abbreviation
FROM(
SELECT date_format(date_add('2000-01-01', interval r.rental_id - 1 day), '%Y-%m-%d') AS date_value
FROM rental r
) t
WHERE t.date_value <= '2020-12-31'
ORDER BY t.date_value
load_dim_staff
员工维度是一个动态维度类型,需要考虑维度属性的变化,此处采用类型二的处理方式来设计数据加载过程。
不存在物理删除的情况,所以无需考虑维度中已被删除数据的处理(staff表中的“active”字段,“1”表示数据有效,“0”表示数据无效,即被删除)。
作业/转换 | 功能 | 文件位置 |
---|---|---|
load_dim_staff.kjb | 负责调度后面的三个转换 | [load_dim_staff.kjb](etl) |
first_load.ktr | 首次加载dim_staff数据 | [first_load.ktr](etl\dim_staff_job) |
load_new_add.ktr | 加载新增加的数据和更新旧行数据 | [load_new_add.ktr](etl\dim_staff_job) |
load_new_update.ktr | 加载新行数据 | [load_new_update.ktr](etl\dim_staff_job) |
load_dim_customer
客户维度同样属于缓慢变化维度。
作业/转换 | 功能 | 文件位置 |
---|---|---|
load_dim_customer.kjb | 负责调度后面的三个转换 | [load_dim_custpomer.kjb](etl) |
first_load.ktr | 首次加载dim_staff数据 | [first_load.ktr](etl\dim_customer_job) |
load_new_add.ktr | 加载新增加的数据和更新旧行数据 | [load_new_add.ktr](etl\dim_customer_job) |
load_new_update.ktr | 加载新行数据 | [load_new_update.ktr](etl\dim_customer_job) |
load_dim_actor
观察actor表,并不存在缓慢变化维度属性,所以采用类型一处理即可。
[load_dim_actor.ktr](etl)
load_dim_film
[load_dim_film.ktr](etl)
load_dim_store
商店维度同样属于缓慢变化维度。
作业/转换 | 功能 | 文件位置 |
---|---|---|
load_dim_store.kjb | 负责调度后面的三个转换 | [load_dim_store.kjb](etl) |
first_load.ktr | 首次加载dim_store数据 | [first_load.ktr](etl\dim_store_job) |
load_new_add.ktr | 加载新增加的数据和更新旧行数据 | [load_new_add.ktr](etl\dim_store_job) |
load_new_update.ktr | 加载新行数据 | [load_new_update.ktr](etl\dim_store_job) |
load_fact_rental
观察rental表发现,该表中没有逻辑删除标识,前端如果删除掉一笔租赁交易,rental中相应的记录会被直接删除。对此,数仓的响应机制是需要删除掉在源系统中已不存在的记录,以确保事实数据的准确性。可根据业务数据修改的周期性设置数仓删除记录的时间范围。
事实表中的数据积累速度快且数据体量大,故采用增量加载方式抽取数据。
作业/转换 | 功能 | 文件位置 |
---|---|---|
load_fact_rental.kjb | 负责调度后面的三个转换 | [load_fact_rental.kjb](etl) |
first_load.ktr | 首次加载fact_rental数据 | [first_load.ktr](etl\fact_rental_job) |
delete_data.ktr | 删除数据 | [delete_data.ktr](etl\fact_rental_job) |
load_new.ktr | 加载最新数据 | [load_new.ktr](etl\fact_rental_job) |
sakila数仓实战案例相关推荐
- 滴滴出行大数据数仓实战
我正在参加年度博客之星评选,请大家帮我投票打分,您的每一分都是对我的支持与鼓励. 2021年「博客之星」参赛博主:Maynor大数据 (感谢礼品.红包免费送!) https://bbs.csdn.ne ...
- Python+大数据-数仓实战之滴滴出行(二)
Python+大数据-数仓实战之滴滴出行(二) 1. 数据转移 #验证sqoop是否工作 /export/server/sqoop-1.4.7/bin/sqoop list-databases \ - ...
- 大数据---离线数仓实战项目(四)
离线数仓实战---网站流量日志分析系统 一.模块开发---数据生成模块 1.1.目标数据 1.1.1.页面数据 1.1.2.事件数据 1.1.3.曝光数据 1.1.4.启动数据 1.1.5.错误数据 ...
- Python + 大数据 - 数仓实战之智能电商分析平台
Python + 大数据 - 数仓实战之智能电商分析平台 1. 项目架构 2. 数据仓库维度模型设计-事实表 事实表的特征:表里没有存放实际的内容,他是一堆主键的集合,这些ID分别能对应到维度表中的一 ...
- Python+大数据-数仓实战之滴滴出行(一)
Python+大数据-数仓实战之滴滴出行(一) 1. 项目架构图 1.1 数据流程处理 1.2 数仓分层 1.3 创建数据库 在Hive中创建数据库-- 创建ods库 create database ...
- 黑马在线教育数仓实战1
1. 教育项目的架构说明 项目的架构: 基于cloudera manager大数据统一管理平台, 在此平台之上构建大数据相关的软件(zookeeper,HDFS,YARN,HIVE,OOZI ...
- 数仓实战 - 滴滴出行
项目大致流程: 1.项目业务背景 1.1 目的 本案例将某出行打车的日志数据来进行数据分析,例如:我们需要统计某一天订单量是多少.预约订单与非预约订单的占比是多少.不同时段订单占比等 数据海量 – 大 ...
- 黑马在线教育数仓实战2
1. 教育项目的数仓分层 回顾: 原有的基础分层 ODS层: 源数据层 作用: 对接数据源, 和数据源的数据保持相同的粒度(将数据源的数据完整的拷贝到ODS层中) 注意: ...
- 大数据旅游项目(离线数仓实战)
文章目录 大数据旅游项目 1 项目分析 1.1 项目分析流程图 2 项目前期准备 2.1 hdfs权限验证 3 数仓前期准备 3.1 本地创建对应账号(root权限) 3.2 hdfs创建分层对应目录 ...
最新文章
- 面向动态环境基于点的语义SLAM系统
- tomcat设置自动监听替换class文件
- python扩展库丰富吗_python扩展库
- java异常基本知识
- SpringBatch 多线程(TaskExecutor)启动Job详解 (七)
- Jquery 实现原理之 Ajax
- 【消息果留言板 v1.2】支持回复邮件提醒+页面pc端宽度调整+时间友好显示
- [转载]各种图像处理类库的比较及选择(The Comparison of Image Processing Libraries)
- php常量的声明和使用
- Atitit attilax在自然语言处理领域的成果
- [ERR] 1273 - Unknown collation: ‘utf8mb4_0900_ai_ci‘
- 编曲的和弦功能进行,及4736251谱子。
- 【史上最全】如何建立模型
- 关于virtualbox虚拟电脑控制台严重错误解决方法。。。
- python 中文转拼音原理_Python中文转拼音
- 让 Vivado有Zybo Board的配置文件
- 港版plus 6 sim卡显示无服务器,苹果6 plus显示无服务怎么办
- 在win10安装pip
- Linux 设备驱动程序(二)
- HDU-1728---逃离迷宫(BFS)
热门文章
- 2345恶意篡改修复
- 3个月学习成功上岗软件测试,我一个文科女也能吃IT饭了...
- 2022.11.11 CodeForces1324D Pair of Topics
- 研发路上的总结和思考 -----来自阿里巴巴中间插件----作者:石佳宁
- B端市场分析报告(一)
- windows主机如何登录阿里云服务器
- linux车机系统怎么进工厂模式,工厂方法模式 - 跟JBPM学习设计模式_Linux编程_Linux公社-Linux系统门户网站...
- 【编程游戏】贺岁霓虹灯。(参观366楼xiuyouxu的霓虹灯)
- 城镇水务系统碳减排路径|给水与再生水系统
- Reasoning about Entailment with Neural Attention