我正在尝试使用Pentaho Data Integration / Pan制作第2类(SCD)表。
第一次通过DimensionLookup步骤运行数据后,我得到了一个类似于2的表:
PKID version date_from date_to MyPK Field1 Field2 ...
150 1 1900-01-01 00:00:00 2199-12-31 23:59:59 1 "X" "Y" ...
到目前为止一切顺利。然后我获得了新数据,将原始表更新到了它,并通过相同的DimensionLookup步骤运行,所有修改的记录如下所示:
PKID version date_from date_to MyPK Field1 Field2 ...
150 1 1900-01-01 00:00:00 2010-06-24 03:45:00 1 "X" "Y" ...
151 2 2010-06-24 03:45:00 2199-12-31 23:59:59 1 "X2" "YYY" ...
看起来也不错。但是对于自上次以来添加到我的数据集的记录,他们会添加date_from ='1900-01-01 00:00:00'。 (并且想到它,我的初始加载使用date_from ='1900-01-01 00:00:00'也有点奇怪。)
我正在使用默认的开始日期,它声称是系统的当前日期时间,虽然我也尝试过“start_trans”(“转换的开始日期”),除了使用时间戳之外它做了同样的事情提前9小时(1899-12-31)。
我看不出如何使用1900对所有新记录都有意义:你不知道什么时候添加,因为看起来每个新记录从一开始就存在。我甚至在Kimball的书中查找了type-2,虽然它不是超显式的,但它似乎表明新插入的值应该从它们开始有效时起作为date_from。
这是PDI中的错误吗?有解决方法吗?我只是错了吗?我是否误解了2型的全部意义?
谢谢!
答案 0 :(得分:1)
您希望使用当前系统时间将新字段或变量添加到转换中。
有几种方法可以做到,所以我只建议一个。 在作业开头添加一个名为set_current_time的新转换。此转换将获得当前系统时间(您可以使用Table Input步骤从数据库中获取它)。然后使用Set Variable将当前时间设置为整个作业中可用的变量。
从这里可以很容易地找到你是否需要使用变量或以前可用的日期作为date_from字段,使用查找和公式/脚本的组合。