Kettle: 维度查询/更新

Kettle中的【维度查询/更新】可以实现数据仓库中的缓慢变化维的两种更新方式:第一种是插入,另一种是更新。假设我们有一种演员表actor_1020,其表结构如下图1所示,actor_1020中的数据的内容如图2所示。

图1
图2

 接下来,我们要在数据仓库中给actor_1020建立一张对应的维度表dim_actor_1021,该维度表的表结构如图3所示。目前dim_actor_1021的表是一张空表。

图3

下面,在Kettle中创建转换(如图4),将actor_1020中的数据更新到dim_actor_1021表中。

图4

下面需要对三个组件进行配置,关于【表输入】和【表输入 2】的配置不再详细说明了,其配置页面如图5、图6。

图5
图6

下面重点来看看【维度查询/更新】的配置,先来看图7

图7

 图7中需要把【目标表】和【关键字】设置好。目标表即我们更新的维度表dim_actor_1021,关键字是用来对维度表中的数据和流里的字段进行匹配的。

图 8

 运行该转换之后,dim_actor_1021表中的数据如图9。

图9

 这里有几点需要特别注意:

  • 截止日期字段 对应的最大年份,这个设置的为2199。我在其他数据仓库的资料中经常看到截止日期经常设置为‘9999-12-31’。这里我尝试了将最大年份改为9999。但是转换未能正确进行,提示 Data truncation: Datetime function: datetime field overflow,提示日期溢出。这主要是因为MySQL中Date类型的最大值为9999-12-31,而当在Kettle中设置最大年份为9999时,其往MySQL中传输的日期为10000-01-01,这已经超过了MySQL中Date的上限,所以报错。此处,可以输入的最大年份为9998. 将最大年份改为2199之后,将dim_actor_1021表清空,重新运行一遍该转换,其得到的dim_actor_1021表中的数据如图10(可以看到截止日期字段已经发生了改变)
图 10
  • 开始日期字段可以自定义设置,需要勾选【使用另外一个可用的开始日期】。该选项提供了几种设置开始日期的方式,这里选择System Date。再将dim_actor_1021表中的数据清空,重新运行一遍转换,其得到的dim_actor_1021表中的数据如图11。
图 11
  • 如果对actor_1020表中actor_id=5的数据进行更改(如图12),然后重新运行转换,最终dim_actor_1021表中的数据如图13。从图13中可以看到dim_actor_1021中新增了一条actor_id=5,actor_key=7的数据,此时这条数据是真正有效的数据,并且该条记录的verison_no变成了2。而原先的actor_key=6的记录中的截止日期字段已经从9999-01-01变成了2020-10-25。
图12
图13

 

 

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值