2016-07-23 14 views
0

更新クエリ用に既に存在するレコードが更新テーブルコンポーネントに送信された場合はどうなりますか?それは未使用ですか?既存のレコードをAbinitioの更新テーブルコンポーネントに再び更新するために

更新される(挿入されない)レコードがあるabinitio出力ファイルがあります。実際に更新されたレコードのみを収集する必要があります。だから、DB(更新されていない)で前とまったく同じで、少なくとも1つのフィールドが更新されているレコードをどうやって分けることができますか?

+0

なぜこれはデータベースとAb Initioの両方でタグ付けされていますか?仕事はどこで行われていますか? –

+0

データベースdB2を読み込むために、更新テーブルコンポーネント(abinitio)のUpdate/insertクエリを使用しています。私の質問にお答えできますか? –

答えて

0

私の最初のアプローチはアレックスの示唆と同じでしたが、Join with DBのようにすべてのフィールドをキーにすると時間とリソースが増えます。より良い方法は、既存の値と新しい値を比較して、再フォーマット選択パラメータまたは各フィールドの式ごとのフィルタで更新することです。これにより、実際に更新されるレコードのみが与えられます。 マイケルもそうです、DB2は実際の更新であるかどうかに関係なく更新されます。したがって、未使用のポートは更新されていないレコードを提供しません。

1

行が変更されているかどうかにかかわらず、DB2は更新を行うため、これはETLの問題です。 Ab Initioについて詳しくはわかりませんが、DB2 Updateの前で変更検出を行う必要があります。 Ususally ETLツールには、変更を検出するための何らかの "Change Capture"/"Compare"/"Difference"関数があります。

+0

答えとしてマークしてください - ありがとう – MichaelTiefenbacher

0

[更新テーブル]コンポーネントの[未使用]ポートで再生したり、ActionRequiredフラグを調べたりすることもできます。

更新が行われるかどうかを判断する簡単な方法は、データベースからのデータ(更新ファイルによって更新されるすべてのレコードを選択するSELECTステートメント)を結合することだけです。レコードのすべてのフィールドのデータベースとキーとして結合します。更新ファイルに関連する未使用ポートに出てくるレコードは、更新アクションを実行するものです。

関連する問題