1

我正在尝试使用 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 中的错误吗?有解决方法吗?我只是用错了吗?我是否误解了 type-2 的全部意义?

谢谢!

4

1 回答 1

1

您想将具有当前系统时间的新字段或变量添加到转换中。

有几种方法可以做到,所以我只推荐一种。在作业开始时添加一个名为 set_current_time 的新转换。此转换将获取当前系统时间(您可以使用表输入步骤从数据库中获取它)。然后使用Set Variable将当前时间设置为在整个作业中可用的变量。

从这里,很容易找到是否需要使用变量或以前可用的日期作为 date_from 字段,使用查找和公式/脚本的组合。

于 2010-09-02T08:53:40.497 回答