Reckonerでkintoneのアプリ同士を相互に同期する方法
kintoneで複数のアプリを運用している際、お互いにデータ同期させたい要望があります。今回は更新日時の新しいデータを正として、Reckonerでデータ同期させる方法を記載します。
サンプル概要
kintoneの2つのアプリ、「アプリA」と「アプリB」があり、この中に入っているデータを同期します。2つのアプリのアプリのスキーマは同一であり、次のとおりです。
「文字列」「担当者」カラムの型はkintone上の「文字列(1行)」であり、「追加更新日時」カラムの型は、kintone上の「日時」です。
2つのアプリ内に入っているデータで、「担当者」と「追加更新日時」のデータが同一であった場合は、同じデータとして扱い、kintone内部で自動的にアイテム更新時に更新される「更新日時」カラムの日時が新しい方を正とし、「文字列」カラムを新しい方のデータに合わせた上で、2つのアプリへ書き込みます。
実行前のアプリAが次の状態で、
実行前のアプリBが次の状態のとき、
「担当者」と「追加更新日時」が同じなため、同じデータとして扱われる「担当者」が「田中太郎」のデータの、更新日時がアプリAよりもアプリBの方が新しい場合、アプリBのデータが優先されます。
このため、実行後のアプリAの状態は次のようになり、
実行後のアプリBの状態は次のようになります。
Reckoner ワークフロー概要
Reckonerで作成したワークフローの全体像は以下のとおりです
設定詳細: 転送元アプリA
転送元のkintoneアプリAの設定は以下のように設定しました。
(事前に登録したkintone接続情報を選択後、すべてのカラムを選択するようなクエリを記述します)
詳細設定: 転送元アプリB
同様にkintoneアプリBの設定は以下のように設定しました。
詳細設定: 結合(JOIN)アプリA
次にkintoneアプリAから抽出したデータに対してkintoneアプリBから抽出したデータを結合(JOIN)します。この時、同じデータとして扱いたい条件である「担当者」と「追加更新日時」が同一なもので左結合し、UPSERTに必要なkintoneの自動採番IDや、各アプリのデータをSELECTします。
詳細設定: 結合(JOIN)アプリB
次にkintoneアプリBから抽出したデータに対してkintoneアプリAから抽出したデータを結合(JOIN)します。こちらも同様に、同じデータとして扱いたい条件である「担当者」と「追加更新日時」が同一なもので左結合し、UPSERTに必要なkintoneの自動採番IDや、各アプリのデータをSELECTします。
設定詳細: SQL文字列カラム計算アプリA/B
「SQL 文字列カラム計算 アプリA」「SQL 文字列カラム計算 アプリB」は、表示名は違いますが、クエリは同一で、次のとおりです。
SELECT *, IF(IFNULL(アプリA更新日時, to_timestamp('1970-01-01T00:00:00Z')) > IFNULL(アプリB更新日時, to_timestamp('1970-01-01T00:00:00Z')), アプリA文字列, アプリB文字列) AS 文字列 FROM linked_table
それぞれのアプリの更新日時が新しい方の「文字列」カラムのデータを、「文字列」カラムに入れています。
設定詳細: 投影 DROPアプリA/B
「投影 DROP アプリA」「投影 DROP アプリB」は、表示名は違いますが、それ以外の設定は同一で、上のとおりです。
転送するために不要となったカラムを落としています。
設定詳細: 転送先アプリA/B
上のように、正しい接続情報を選択した上で、各アプリに対して、kintone内部で自動採番されるIDである「RecordId」をキーにした上でUPSERTを行います。
以上で2つのkintoneアプリをデータ同期させることができました
Reckoner(レコナー)について
Reckoner(レコナー)は、スリーシェイクが提供するオンプレミスからクラウドサービスまで、様々なデータを連携させることが可能なクラウドネイティブなデータ連携プラットフォーム(Data Integration Platform as a Service)です。
データ整備に欠かせないETL/ELTやデータパイプラインなどをノンプログラミングで実現し、従来エンジニアが必要とされていた開発・運用コストを大幅に削減できます。
https://www.reckoner.io/
ETLツールについて詳しく知りたい、ETLツールの選び方を知りたいという方はこちらの「ETLツールとは?選び方やメリットを解説」をぜひご覧ください。