ETL示例解决方案 —— Sakila示例之load_fact_rental转换(笔记九)

load_fact_rental转换

load_fact_rental转换是作业load_rentals最后的转换。
作业load_rentals里所有之前的转换都是加载维度表,而此转换是ETL最后的加载fact_rental事实表。在这里插入图片描述
  load_fact_rental转换的结构与load_rentals作业中其他转换不同。其他转换大多数将数据反正规化,从而加载维度表,而此转换的本质在于计算度量值和查找相应的维度键

  • 变更数据捕获
      转换的开始部分仍然使用两个 ”表输入“ 步骤。分别是 “ max_fact_rental_last_update ” 和 “ Get New Rentals to load ”步骤。
      与其他转换相比,有两个不同的地方,这个转换使用rental_id 列来检测变化,而没有使用last_update列。因为rental_id 值可以自动递增,所以 rental_id 列与last_update列的原理相同。**唯一的缺点是:使用rental_id时,我们不能捕获到rental表的任何更新。**这里假设了源表不存在更新的情况。在这里插入图片描述
  • 获取日期时间智能键
      智能键的值实际就是把日期和时间值转化成特定的字符串格式,通过步骤 “ Get data and time keys ” 来获得。这样在检索维度表的代理键是,不用再去查询维度表。在这里插入图片描述
  • 计算度量值

fact_rental表有三个度量值: 
   1. count_rentals:租借次数,这是所谓的非事实性事实。根据定义,如果在原rental表中有一行数据,就在fact_rental事实表中看作一次租借。在数据库上,给该度量列设置默认值1即可实现。
   2. count_return:归还次数,本列用来设置租凭是否已归还,值是NULL(意味着迄今为止此租借没有归还)或 1 (意味着此租借已归还)。
   3.rental_duration:租借时长,本列用来设置租借时间长短,值的设置取决于租借是否已归还,值是NULL(意味着迄今为止此租借没有归还)或租出日期和归还日期之间的时长,单位是秒。
   因为fact_rental表同时记录租凭和归还,随着时间变化某个数据行的状态度量值可能改变。
   过滤步骤 “ return date?” 负责检测是否有归还日期。如果有归还日期,数据流向计算器步骤 “ calculate rental duration ”,将count_returns度量值设置为1,再计算rental_duration的度量值,即用归还日期减去租凭日期。如果没有归还日期,数据流向 “ rental duration null ” 步骤,该步骤将度量值 count_returns 和 rental_duration 设置为空。在这里插入图片描述

  • 查询常规维度表中的键
      在原sakila数据库中,rental表没有直接指向store表或film表,而是有一列inventory_id,指向inventory表,再由inventory表指向 store表和film表。所以,当我们查找维度的键值时,我们首先需要查找库存。通过 “ Lookup film_id and store_id(from inventory)” 步骤查找库存。得到film_id和store_id后,就可以再查找真正的维度键。在这里插入图片描述
  • 查询类型2缓慢变化维度的键
       对于类型2的缓慢变化维度来说,不能简单地用原始的ID列查找维度,因为在类型2缓慢变化型维度中,每一个这样的ID值可以有多行。如果要从类型2缓慢变化维度表中查找行,需要知道ID已经上下文时间,这样才能找到正确的维度行。在这里插入图片描述
       如图,上述功能是通过 “ Lookup dim customer key”、“ Lookup dim store key”和“ Lookup dim staff key”等步骤实现的,它们都是 “ 维度查询/更新 ” 类型的步骤。这一次,这种类型的步骤是用于在加载事实表时,从维度中查找维度键,而不是用来向维度表中加载维度。
  • 加载事实表
       转换的最后一步是 “ 插入/更新 ” 步骤。因为这是一个累计快照事实表,所以我们需要在租凭状态发生变化时(即当有租借或归还业务发生时)能更新事实表。在这里插入图片描述

到这里,Sakila示例数据库使用Kettle加载星型模型的关键技术解释完毕。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值