以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数仓实战案例相关推荐

  1. 滴滴出行大数据数仓实战

    我正在参加年度博客之星评选,请大家帮我投票打分,您的每一分都是对我的支持与鼓励. 2021年「博客之星」参赛博主:Maynor大数据 (感谢礼品.红包免费送!) https://bbs.csdn.ne ...

  2. Python+大数据-数仓实战之滴滴出行(二)

    Python+大数据-数仓实战之滴滴出行(二) 1. 数据转移 #验证sqoop是否工作 /export/server/sqoop-1.4.7/bin/sqoop list-databases \ - ...

  3. 大数据---离线数仓实战项目(四)

    离线数仓实战---网站流量日志分析系统 一.模块开发---数据生成模块 1.1.目标数据 1.1.1.页面数据 1.1.2.事件数据 1.1.3.曝光数据 1.1.4.启动数据 1.1.5.错误数据 ...

  4. Python + 大数据 - 数仓实战之智能电商分析平台

    Python + 大数据 - 数仓实战之智能电商分析平台 1. 项目架构 2. 数据仓库维度模型设计-事实表 事实表的特征:表里没有存放实际的内容,他是一堆主键的集合,这些ID分别能对应到维度表中的一 ...

  5. Python+大数据-数仓实战之滴滴出行(一)

    Python+大数据-数仓实战之滴滴出行(一) 1. 项目架构图 1.1 数据流程处理 1.2 数仓分层 1.3 创建数据库 在Hive中创建数据库-- 创建ods库 create database ...

  6. 黑马在线教育数仓实战1

    1. 教育项目的架构说明 项目的架构:      基于cloudera manager大数据统一管理平台, 在此平台之上构建大数据相关的软件(zookeeper,HDFS,YARN,HIVE,OOZI ...

  7. 数仓实战 - 滴滴出行

    项目大致流程: 1.项目业务背景 1.1 目的 本案例将某出行打车的日志数据来进行数据分析,例如:我们需要统计某一天订单量是多少.预约订单与非预约订单的占比是多少.不同时段订单占比等 数据海量 – 大 ...

  8. 黑马在线教育数仓实战2

    1. 教育项目的数仓分层 回顾: 原有的基础分层 ODS层: 源数据层     作用: 对接数据源, 和数据源的数据保持相同的粒度(将数据源的数据完整的拷贝到ODS层中)     注意:       ...

  9. 大数据旅游项目(离线数仓实战)

    文章目录 大数据旅游项目 1 项目分析 1.1 项目分析流程图 2 项目前期准备 2.1 hdfs权限验证 3 数仓前期准备 3.1 本地创建对应账号(root权限) 3.2 hdfs创建分层对应目录 ...

最新文章

  1. 面向动态环境基于点的语义SLAM系统
  2. tomcat设置自动监听替换class文件
  3. python扩展库丰富吗_python扩展库
  4. java异常基本知识
  5. SpringBatch 多线程(TaskExecutor)启动Job详解 (七)
  6. Jquery 实现原理之 Ajax
  7. 【消息果留言板 v1.2】支持回复邮件提醒+页面pc端宽度调整+时间友好显示
  8. [转载]各种图像处理类库的比较及选择(The Comparison of Image Processing Libraries)
  9. php常量的声明和使用
  10. Atitit attilax在自然语言处理领域的成果
  11. [ERR] 1273 - Unknown collation: ‘utf8mb4_0900_ai_ci‘
  12. 编曲的和弦功能进行,及4736251谱子。
  13. 【史上最全】如何建立模型
  14. 关于virtualbox虚拟电脑控制台严重错误解决方法。。。
  15. python 中文转拼音原理_Python中文转拼音
  16. 让 Vivado有Zybo Board的配置文件
  17. 港版plus 6 sim卡显示无服务器,苹果6 plus显示无服务怎么办
  18. 在win10安装pip
  19. Linux 设备驱动程序(二)
  20. HDU-1728---逃离迷宫(BFS)

热门文章

  1. 2345恶意篡改修复
  2. 3个月学习成功上岗软件测试,我一个文科女也能吃IT饭了...
  3. 2022.11.11 CodeForces1324D Pair of Topics
  4. 研发路上的总结和思考 -----来自阿里巴巴中间插件----作者:石佳宁
  5. B端市场分析报告(一)
  6. windows主机如何登录阿里云服务器
  7. linux车机系统怎么进工厂模式,工厂方法模式 - 跟JBPM学习设计模式_Linux编程_Linux公社-Linux系统门户网站...
  8. 【编程游戏】贺岁霓虹灯。(参观366楼xiuyouxu的霓虹灯)
  9. 城镇水务系统碳减排路径|给水与再生水系统
  10. Reasoning about Entailment with Neural Attention