こんにちは。 CData Software Japan Support Engineer の松本です。
今回は、SSIS を使って、SQL Server と、kintone のような異なるデータソース間で、更新を行う際に使えるテクニックをご紹介します。
この方法を覚えると、ETL でのデータフローの考え方が理解できるようになるので、いろいろな処理に応用することができます。
前回のあらすじ
前回は、SSIS のプロジェクトを作成して、SQL Server から読み込んだデータを、kintone に挿入する処理を解説しました。www.cdatablog.jp
今回は、挿入と更新を行えるようにしていきます。
データの準備
kintoneには、前回挿入したレコードが存在しています。
前回の挿入で、レコードが追加されたkintone アプリ
今回は、SQL Serverのレコードにある前回挿入したレコードのValue を更新し、新しいレコードを挿入します。
SQL Server のデータ
SQL Server
kintone
処理
Key
Value
RecordId
Key
Value
000000
値2
1
000000
値1
更新
000001
値3
挿入
1.単純に更新してみる
まず、シンプルにそのまま更新してみます。 CData Kintone Destination は、Upsert がサポートされているので、更新と挿入を一度に行うことができます。
単純にUpsert
kintone Upsert
しかし、これはエラーになってしまいます。
単純にUpsert の実行結果
エラーメッセージを確認するとこのようになっていました。
単純にUpsert のエラーメッセージ
The primary key must be specified to update a row. (行を更新するには、主キーを指定する必要があります。) この主キーというのは、kintone のデータに設定されているRecordId (レコード番号)のことです。
挿入だけであれば、RecordId は不要ですが、更新をする場合はkintone からRecordId を取得して、SQL Server のレコードと、kintone のRecordId を関連付けてあげる必要があります。
2.kintone からRecordId を取得して、更新できるようにする
CData Kintone Source
SQL Server のデータと、RecordId を関連付けるためには、
1.SQL Server と、kintone のデータをそれぞれ取得する 2.Key を基準に2つのテーブルをマージする
という手順を行うことで、SQL Server のデータに、kintone のRecordId を関連付けることができます。
まず、kintone からもデータを取得するため、CData Kintone Source コンポーネントを追加します。
CData Kintone Source コンポーネントを追加
CData Kintone Source Editior
この二つを、マージ結合コンポーネントで、1つに結合することでRecordId を関連付けることができますが、マージ結合にデータを入力する場合、予めデータを、結合するキー項目(今回は、Key 列)で並べ替えておく必要があります。
並べ替え
並べ替え(Key)
右:SQL Server 左:kintone
マージ結合
マージ結合
マージ結合 入出力の選択
マージ結合では、2つの入力があるため、最初に、接続した入力をどちらに繋ぐかを選択するダイアログが表示されます。 今回の場合は、SQL Server を左側に接続します。
マージ結合 変換エディター
結合の種類で、完全外部結合(FULL OUTER JOIN) を選択し、SQL Server のKey, Value と、kintone のRecordId を選択します。
CData Kintone Destination
最後に、結合したデータを、CData Kintone Destination コンポーネントに入力します。
CData Kintone Destination コンポーネント
CData Kintone Destionation Editor
新たに、使用できる列にRecordId が追加されていることがわかります。
データビューアーの有効化(V)
データフローパスを右クリックして、「データビューアーの有効化(V) 」をクリックすると、実行時にデータの中身を表示することができます。
この状態で、タスクを実行します。
マージ結合の結果
マージ結合された出力を、データビューワーで表示すると、2つのデータが結合され、前回挿入したレコードはRecordIdが入り、新たに挿入するレコードはRecordId がNULL になっていることがわかります。
実行成功
kintone アプリにデータが反映されている
まとめ
今回ご紹介したデータフローの形は、異なるデータソース間でキーが異なるデータを連携させる場合に、共通で使うことができるものなので、一度覚えてしまえば、データが異なっても同じ手順で連携させることができるようになります。
データ連携でお困りなことがあれば、下記URLのサポートへ、お気軽にお問い合わせください。CDATA SOFTWARE JAPAN - See the World as a Database
関連コンテンツ