こんにちは、プロダクトマネージメント@for Apps の宮本です!
これまで「CData Sync でkintone に書き込みたい」という声を多くいただいており、その実現に向けた検討を続けてきました。当初はInsert・Updateモードでの対応を想定していましたが、タイミングよくkintone 側でUpsert API が公開されたこともあり、Upsert モードも含めたリバースETL に対応することができました。CData Syncのようなシンプルな操作性の中で、「kintone → データウェアハウス」、「データウェアハウス → kintone」といった2つのジョブを組み合わせることで、1度DWH でスコアリングなどのデータ加工したあとにkintone へ書き戻す運用が可能になります。また、Salesforce から kintone への移行や、「オンプレミスDB → kintone」といった既存システムとの連携にも柔軟に対応できます。それではさっそく、リバースETL 機能でkintone 連携についてみていきましょう。
kintone への連携方式
CData Sync のリバースETL 機能では、追加型の「Insert モード」、IDなどをキーにした更新型の「Update モード」、そして一意となる任意カラムでの「Upsert モード」という3つのモードが独立して用意されています。Kintone への連携でも同じ仕組みで行われます。
では、各モードについて、SQL Server → kintone という構成を例に、もう少し詳しく見ていきます。
Insert モード
Kintone ではレコードが追加される自動的にIDが付与されますので、Insert モードにおいては、ジョブ作成時にカラムマッピングから設定していきます。
以下はSQL Server にある取引先名をkintone のAccountアプリの会社名項目に連携する際の設定です。

選択したアプリによっては、kintone側で必須項目が設定されており、該当する場合は以下のように設定エリアが表示されます。
リバースETL実行前のSQL Server の状態は以下の通りです。
ジョブを実行すると、「データソース側のメタデータ取得」、「デルタスナップショットのテーブル作成」、「Kintone アプリのメタデータ取得」と経て、kintone にレコード追加のリクエストを送ります。

Insert で行っていることは以上で、今回の内容だと3件のレコードが追加される形になります。
Update モード
Update モードでは、kintone 側のレコードID が必須となります。このモードは、kintone → DB/DWH → kintone のように、一度中間ストア(DWHなど)でデータを変換し、それを元にkintoneのレコードを更新するといったケースで活用できます。
まずは、kintone から SQL Server へのレプリケーションを行うためにジョブを作成します。

タスクを追加ボタンからレプリケーションしたいkintone アプリを選択し、レプリケーションを実行します。
これでkintone アプリのデータがSQL Server に連携されました。
続いて、SQL Server から kintone へのリバースETLジョブを作成します。
ジョブ作成時にはデータソース側にあるkintone のレコードIDをキー項目に設定します。その他は連携したい項目をマッピングしていきます。

Update の際のリクエスト内容です。IDがkintone 上で該当すれば更新されます。
しかし、該当ID が無い場合はエラーで処理が終了します。
{"code":"GAIA_RE01","id":"xxxxxxxxx","message":"指定したレコード(id: 32, 33, 31)が見つかりません。"}
HTTP/1.1 404 Not Found, 150 Bytes Transferred
もし、データソース側でレコードが追加される可能性がある、もしくはkintone 側で削除されるケースがある場合は、次のご紹介するUpsert モードをご検討ください。
Upsert モード
データソース側でレコード追加/削除、もしくはkintone 側で削除される可能性がある場合はこちらのモードを利用します。
Upsert モードでは、まずはどのカラムをキーにするかを指定します。

kintone 側のキーの選択肢では、「会社コード」と「会社コード2」が表示されています。これは、kiontone 側で重複禁止のチェックが入っているものがリストアップされます。アプリの項目設定で以下のように「値の重複を禁止する」にチェックが入ったものが対象となります。
カラムマッピングはInsert やUpdate と同じように指定します。

リクエストでは一番最後に「 "upsert": true」を付けることで、kintone 上でUpsert モードで実行されるようになります。
リバースETL ジョブでの注意点
- 初回実行時にスナップショットテーブルをデータソース側(今回ならSQLServer側)に自動作成します。そのため、データベース側でテーブル作成できる権限が付与されている必要があります。
- リバースETL ジョブは途中で全件洗替方式に変更することは画面上の設定ではできません。ただし、差分データを抽出する際に使うスナップショットテーブルを手動削除しておくことにより、全件更新が可能となります。なお、どのスナップショットテーブルを利用しているかは、現時点ではジョブのレプリケートログでの確認となります。
おわりに
いかがでしたか。新しく追加された「kintone への書き込みをサポートしたリバースETL」を使うことで、kintone データをスコアリングして書き戻したり、他のサービスやシステムのデータをkintone に集約することもCData Sync で可能になりました!CData Sync は30日間の無償トライアルが可能ですので、ぜひお試しください!
https://jp.cdata.com/sync/trial