こんにちは。CData Software Japan の色川です。
SaaS とのデータ連携は大きく分けて「SaaS からデータを取得する」「SaaS のデータを登録・更新する」の2つの方向がありますが、連携したいデータ件数に依っては「SaaS 側が設けるAPI 制限(API 利用に関する制限・制約)への考慮が必要になる」場面が生じる事もあります。
例えば、この記事の時点において、kintone では「1日に実行できるAPIリクエスト数」は「1つのアプリにつき10,000件」と制限されていますので、CData Arc を利用して「1つのkintone アプリに対して、1日で数千件を超えてデータを登録・更新したい場合」には、1件ずつAPI リクエストを消費して処理するUpsert アクションでは制限に抵触する可能性が出てきます。
この記事では、このような場面で活用を検討できる「kintone への登録や更新をバッチで実行する方法」をご紹介します。
この記事では、人気の高いkintone を例にご紹介していますが、CData Drivers が一括でのデータロードをサポートしているデータソースであれば、基本的に同じ概念・設定手順でバッチ実行(1回のAPI リクエストで複数件の処理をリクエストする実行方法)を検討する事ができます。この記事は「Arc のUpsert アクションのデフォルト構成と比べ、登録や更新でAPI 消費を低減する方法」として捉えて頂いても良いかも知れません。
この記事のシナリオ
この記事では、1000 件のデータを含んだCSV ファイルを用意して、kintone の「顧客リスト」アプリへ連携(登録・更新)するケースを例にしてご紹介します。
kintone と連携するフローの基本的な設定から知りたい方は、こちらの記事などを参考にしてください。
この記事の前提となる情報
kintone のREST API に関する制限値
kintone の制限値一覧は、こちらのページで確認することができます。外部からの連携に関係するREST API に関する制限値の中でも、連携対象の件数や頻度により考慮する機会が比較的多いのが「1日に実行できるAPIリクエスト数」かと思います。
CData Arc のUpsert アクション
CData Arc では「SaaS のデータを登録・更新する」機能として「Upsert アクション」を搭載しています
CData Arc のUpsert アクションは、レコード単位に指定したkey で既にデータが存在しているかを検索し、存在していれば更新(Update)を、存在していなければ追加(Insert)を、Arc のコネクタの中で判断し実行してくれる便利な機能です。
Upsert のAPI が用意されているSaaS は限られており、Upsert API の無いSaaS に対して既存データの有無に依って処理を分けてくれるCData Arc のUpsert アクションは多くの場面で活躍します。ただ「指定したkey でSelect を実行して、その結果に応じてUpdate もしくはInsert を実行する」という仕組み上、この機構では1レコードずつ処理され、SaaS へのAPI リクエストもその応分に実施されます。
そのため連携したいデータ件数に依っては、1 件ずつAPI リクエストを消費して登録または更新するUpsert アクションではフィットせず、1 回のAPI リクエストで複数件をまとめて処理する(バッチで登録・更新する)必要が生じる場面もあります。この記事はそのような場面で参考にして頂ける事を想定しています。
この記事のシナリオを「Upsert アクションのデフォルト構成」で実行した場合、おおよそ「処理対象件数の数倍程度(Select + Insert or Update + α)」のAPI リクエストが発生します。実行時間については手元の環境で約20分かかりました。数千回以上のAPI リクエストを実行していますので、実行時間自体は妥当なものでしょう。1000 件の連携を1日1回実行する程度であれば、この「Upsert アクション」のままでも許容範囲かも知れませんが「処理対象件数がこの記事より多い場合」や「1日に何回も実行する必要がある場合」は「Upsert アクションのデフォルト構成」はフィットしなさそうです。
kintone へバッチで登録する方法(Insert)
それでは「バッチで登録(Insert)する方法」からご紹介します。
kintone の場合、1回のAPI リクエストあたり最大100 件を処理できるので、Upsert アクションのデフォルト構成と比べて、単純計算でAPI リクエストの回数は約100分の1に低減されることが期待できます。
kintone へバッチで登録(Insert)する場合は、kintone へ連携するコネクタを以下のように設定してフローを構成します。
まず「Insert」か「Update」かを明示化するために「UPSERT」をOFF にします。UPSERT をOFF にすると、Upsert アクションはInsert を実行するように構成されます。
コードモードで見ると「action="insert"」となっており、Insert を実行するように構成されている事が分かります。
次に「高度な設定」にある「バッチインプットサイズ」を「100」に設定します。
kintone へバッチで登録(Insert)する場合の設定としては以上です。他の部分は一般的なフロー設定の流れで構成してください。
記事の環境・条件において、この設定で実行した場合、1000 件の登録に対して、API リクエストの発生は20回を超えず、実行時間は10秒以内で完了しました。
CData Drivers のレイヤでいうと、こちらで紹介している機構が実行されるイメージです。
kintone へバッチで更新する方法(Update)
次に「バッチで更新(Update)する方法」からご紹介します。
基本的な設定は「バッチで登録(Insert)する方法」と近いですが、この記事の時点において、kintone にバッチで更新(Update)するためには条件指定にRecordId が必要です。RecordId 以外を条件にUpdate を構成した場合は、バッチ更新とはならず、1レコードごとにAPI リクエストが発生し処理されます。そのため「バッチで更新(Update)する方法」は「kintone から取得したデータを編集した後にまとめて更新したい」場面等にフィットしそうです。
kintone へバッチで更新(Update)する場合は、kintone へ連携するコネクタを以下のように設定してフローを構成します。
まず「Insert」か「Update」かを明示化するために「UPSERT」をOFF にします。
コードモードで「action="update"」と編集し、Update を実行するように構成します。
次に「高度な設定」にある「バッチインプットサイズ」を「100」に設定します。
kintone へバッチで更新(Update)する場合の設定としては以上です。他の部分は一般的なフロー設定の流れで構成してください。
記事の環境・条件において、この設定で実行した場合、1000 件の更新に対して、API リクエストの発生は20回を超えず、実行時間は10秒以内で完了しました。
CData Drivers のレイヤでいうと、こちらで紹介している機構が実行されるイメージです。
(補足)kintone の複数レコードを1つのファイルへまとめて取得する(Select アクション)
kintone からデータを取得する(Select アクション)についても少しご紹介しておきます。
CData Arc のSelect アクションでは1件ずつAPI リクエストする訳ではありませんが、kintone などデータソース系コネクタでデータを取得する(Select アクション)とき、Select アクションのデフォルト構成では、レコード単位に後続のフローで処理するメッセージファイルを生成します。
データ1件ごとの流れがコントロールしやすく利便は高いですが、取得対象件数が多いときや、後続で今回ご紹介したようなバッチ処理を利用したい場合など、1つのファイルにまとめて取得したい場面はままあります。そのようなときは、データを取得する(Select アクション)コネクタの「高度な設定」にある「最大レコード数」で指定します。取得対象の全レコードを1つのファイルにまとめて出力したい場合は「-1」として構成します。
おわりに
この記事では、SaaS 側のAPI 制限への考慮が必要になる場面で活用を検討できる「SaaS への登録や更新をバッチで実行する方法」を、人気の高いデータソースであるkintone を例にご紹介しました。
CData Arc はシンプルで拡張性の高いコアフレームワークに、豊富なMFT・EDI・エンタープライズコネクタを備えたパワフルな製品です。CData Drivers との組み合わせで270を超えるアプリケーションへの連携を実現できます。必要な連携を低価格からはじめられる事も大きな特長です。
皆さんのつなぎたいシナリオでぜひ CData Arc を試してみてください。
CData Arc - セキュアなデータ連携とマネージドファイル転送(MFT)
製品を試していただく中で何かご不明な点があれば、テクニカルサポートへお気軽にお問い合わせください。
CData Software Japan - Support Form
この記事では CData Arc™ 2023 - 23.3.8698.0 を利用しています。
関連コンテンツ