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