こんにちは。
CData Software Japan Support Engineer の松本です。
今回は、SSIS の条件分割コンポーネントを使って、前回作成した更新処理を元に、差分更新と削除を行う方法についてご紹介します。
前回のあらすじ
前回は、挿入で作ったフローを改良して、更新と挿入ができるようにしました。
差分更新対応
差分更新をするためには、更新しなくていいレコードを除いたものをUpsertに渡せば、差分で更新ができるようになります。
今回更新しなくていいレコードというのは、Value が同じレコードです。
実際の業務では、更新日時で判断する方法が良く用いられます。
差分更新
データの準備
レコードのValue を一か所変更したものと、新しいレコードを追加し、3レコードの内、この2レコードのみを反映します。
SQL Server | kintone | 処理 | |||
---|---|---|---|---|---|
Key | Value | RecordId | Key | Value | |
000000 | 値2 | 1 | 000000 | 値2 | 無視 |
000001 | 値4 | 3 | 000001 | 値3 | 更新 |
000002 | 値3 | 挿入 |
kintone からValue を取得
kintone からValue の値を取得するため、CData Kintone Source Editor を開き、前回選択したRecordId, key に加えてValue を選択します。
kintone 並べ替え
新たに列が増えたので、並べ替えも追加した列出力されるよう、パススルーにチェックが入っていることを確認します。
マージ結合
マージ結合で、追加した列を追加します。 Key, Value は、両方のデータソースに存在しているので、出力の列名を変更しておきます。
条件分割
マージ結合とCData Kintone Destination(kintone Upsert) コンポーネント間の接続を削除し、代わりに条件分割コンポーネントを繋ぎます。 条件分割変換エディター画面を開きます。
条件分割コンポーネントは、リストに設定されている順序ごとに条件に一致するかを判定し、一致していれば出力名の出力にレコードを振り分けていきます。
今回は、RecordId が存在しないレコード(挿入)と、Value が異なっているレコード(更新)を選択するようにします。
条件でカラム名や演算子・関数などを入力する際は、上の項目をドラッグアンドドロップすることで入力できます。
CData Kintone Destination
条件分割コンポーネントには、「更新」と「条件分割の規定出力」という二つの出力があるので、「更新」をCData Kintone Destination に接続します。
差分更新の実行
データビューワーでデータを確認しながら、タスクを実行してみます。
3レコードのうち、更新・挿入を行う2レコードのみが、出力されていることが確認できます。
削除
削除も、差分更新と考え方は同じです。
データの準備
Key="000001"のレコードを削除します。
SQL Server | kintone | 処理 | |||
---|---|---|---|---|---|
Key | Value | RecordId | Key | Value | |
000000 | 値2 | 1 | 000000 | 値2 | 無視 |
3 | 000001 | 値4 | 削除 | ||
000002 | 値3 | 4 | 000002 | 値3 | 無視 |
条件分割に削除するレコードの出力を追加
SQL Server 側にKey が存在しないレコードを削除という出力名に出力します。
また、削除するレコードは、SQl Server のValue がNULLになっていますが、更新の判定でValue 同士を比較する際、NULL が含まれているとエラーになるため、NULL のチェックを追加しています。
順序 | 出力名 | 条件 |
---|---|---|
1 | 更新 | ISNULL(RecordId) || (!ISNULL(Key)) && Value != Value_kintone |
2 | 削除 | ISNULL(Key) |
CData Kintone Destination
削除を行うため、もう一つCData Kintone Destination コンポーネントを追加します。
CData Kintone Destination Editor を開き、Action でDelete を選択し、マッピングでRecordId のみを選択します。
削除の実行
先ほどと同様に、データビューワーでデータを確認しながら、タスクを実行してみます。
削除対象となる、1レコードが出力されています。
まとめ
条件分割コンポーネントを使って、データを振り分けることで、複数のデータソースから読み込んだデータを結合して、処理ごとに分けることができるようになります。