CData Software Blog

クラウド連携のCData Software の技術ブログです。

SSIS でSQL Server からkintone へ反映(差分更新・削除編)

こんにちは。
CData Software Japan Support Engineer の松本です。

今回は、SSIS の条件分割コンポーネントを使って、前回作成した更新処理を元に、差分更新と削除を行う方法についてご紹介します。

前回のあらすじ

前回は、挿入で作ったフローを改良して、更新と挿入ができるようにしました。

www.cdatablog.jp

差分更新対応

差分更新をするためには、更新しなくていいレコードを除いたものをUpsertに渡せば、差分で更新ができるようになります。
今回更新しなくていいレコードというのは、Value が同じレコードです。
実際の業務では、更新日時で判断する方法が良く用いられます。

差分更新

データの準備

SQL Server のデータ
レコードの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 を取得

CData Kinton Source Editior
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 へ接続
条件分割コンポーネントには、「更新」と「条件分割の規定出力」という二つの出力があるので、「更新」をCData Kintone Destination に接続します。

差分更新に対応したデータフロー

差分更新の実行

データビューワーでデータを確認しながら、タスクを実行してみます。

マージ結合の出力データビューアー

更新のデータビューアー
3レコードのうち、更新・挿入を行う2レコードのみが、出力されていることが確認できます。

kintone アプリにデータが反映されている

削除

削除も、差分更新と考え方は同じです。

データの準備

SQL Server のデータ
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 ServerValue がNULLになっていますが、更新の判定でValue 同士を比較する際、NULL が含まれているとエラーになるため、NULL のチェックを追加しています。

順序 出力名 条件
1 更新 ISNULL(RecordId) || (!ISNULL(Key)) && Value != Value_kintone
2 削除 ISNULL(Key)
CData Kintone Destination

CData Kintone Destination コンポーネントを追加
削除を行うため、もう一つCData Kintone Destination コンポーネントを追加します。

削除の出力を接続

CData Kintone Destination Editior
CData Kintone Destination Editor を開き、Action でDelete を選択し、マッピングでRecordId のみを選択します。

削除の実行

先ほどと同様に、データビューワーでデータを確認しながら、タスクを実行してみます。

マージ結合の出力データビューアー

削除のデータビューアー
削除対象となる、1レコードが出力されています。

kintone アプリにデータが反映されている

まとめ

条件分割コンポーネントを使って、データを振り分けることで、複数のデータソースから読み込んだデータを結合して、処理ごとに分けることができるようになります。