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 の本でタイプ 2 を調べましたが、それほど明示的ではありませんでしたが、新しく挿入された値は、有効になり始めた時点から date_from を持つ必要があることを示しているようです。

これは PDI のバグですか? 回避策はありますか? 私の使い方が悪いだけでしょうか?タイプ2の全体のポイントを誤解していますか?

ありがとう!

4

1 に答える 1

1

現在のシステム時刻の新しいフィールドまたは変数をトランスフォーメーションに追加します。

それを行うにはいくつかの方法があるので、1つだけ提案します。set_current_timeと呼ばれるジョブの開始時に新しい変換を追加します。この変換により、現在のシステム時刻が取得されます(テーブル入力ステップを使用してデータベースから取得できます)。次に、[変数の設定]を使用して、現在の時刻をジョブ全体で使用できる変数として設定します。

ここから、ルックアップと数式/スクリプトの組み合わせを使用して、変数または以前に使用可能だった日付をdate_fromフィールドとして使用する必要があるかどうかを簡単に見つけることができます。

于 2010-09-02T08:53:40.497 に答える