こんにちは。CData Software Japan リードエンジニアの杉本です。
以前 Salesforce のAPI Limitに関するまとめを書きました。
https://www.cdatablog.jp/entry/salesforceapimit
今回は日々問い合わせが増えている Salesforce Marketing Cloud Account Engagement (旧 Pardot) についてもまとめてみようと思います。
(ちなみにドキュメントがまだPardotで残っているので、以下 Pardot で記述しています。)
Salesforce Pardot APIの制限
Salesforce PardotのAPIリクエストの制約は「日次コール制限」と「同時接続制約」の2種類があります。
どちらも以下のリファレンスに書かれており、「同時接続制約」は最大5個まで、「日次コール制限」は利用するPardotエディションによって分かれており、25,000リクエスト~、となっています。
https://help.salesforce.com/s/articleView?id=sf.pardot_admin_api_using.htm&type=5
自身のPardot 環境での確認方法
実際に利用している環境で確認する場合は「Pardot Settings」に移動しましょう。
以下のように「Max Daily API requests」と「Concurrent API Request Limit」で確認できます。
また、「Usage and Limits」タブに移動すると現在の消費状況も確認できます。
1APIリクエストあたりで取得できるレコード数
さて、まず基本的なAPI制限を確認してみましたが、このAPIリクエストの範囲内でどれだけの数のレコードが取得できるのでしょうか?
1回のAPIリクエストで取得できるレコード数はSalesforce PardotのAPIバージョンおよび利用するAPIによって異なります。
例えば、V3もしくはV4の場合は1APIリクエストあたり200レコード取得し、そこからページネーションを行います。
https://developer.salesforce.com/docs/marketing/pardot/guide/prospect-accounts-v4.html#prospect-account-query
なので、もし「1日あたり50,000リクエスト」可能な環境であれば約1000万件が1日に取得できるレコードの数と考えることができます。
ちなみに、Pardot API V5では、1リクエストあたりのLimitが最大1000までサポートしていますが、
https://developer.salesforce.com/docs/marketing/pardot/guide/version5overview.html#formatting-object-api-requests
ページネーションの仕様が異なっていることもあってか、100,000レコードに到達到達した時点で接続が切れてしまうようなので要注意です。
https://developer.salesforce.com/docs/marketing/pardot/guide/version5overview.html#pagination
なお、データを取得する専用のAPIとして「Export API」というものもあり、非同期ながらCSVフォーマットで一括取得が可能です。大量のデータ取得前提であれば、こちらが良いでしょう。
https://developer.salesforce.com/docs/marketing/pardot/guide/export-v4.html
CData Salesforce Pardot DriverでのAPIリクエスト消費プロセス
最後にCData Salesforce Pardot Driver におけるAPIリクエスト内容を確認してみましょう。
今回は検証用としてJDBCを用いていますが、基本的な仕様はODBCやADO.NET、Syncでも同様です。
https://www.cdata.com/jp/drivers/pardot/
今回はAPI Limitに抵触しやすい「データ取得」にシナリオを絞って確認します。
なお前述の通り、利用するAPIによってリクエストアプローチが異なります。CData Salesforce Pardot Driverでは「Schema」プロパティで利用するAPIのバージョンを指定できます。今回はデフォルトバージョンである「SalesforcePardotV4」を利用します。
https://cdn.cdata.com/help/GPG/jp/jdbc/RSBSalesforcePardot_p_Schema.htm
まずシンプルにProspectの一覧を取得してみます。現在の環境には1025件Prospectがあります。
SELECT * FROM Prospects;
以下のようにデータが取得できました。
この通信処理をFiddlerを通じて確認してみると、以下のように10リクエストが発行されていることがわかります。そしてOffsetパラメータを通じてページネーションを行っていますね。
このようにCData Driver内部では発行されたクエリに基づく対象データが存在する限り自動的にページネーションを行いデータを取得するようになっています。
一度に取得する件数は「Pagesize」プロパティで制御しています。ただ、デフォルトで200件なので、今回のようなV4のAPIで取得を行うときは特にいじる必要は無いでしょう。V5を利用する場合は、1000まで有効なので調整できます。
https://cdn.cdata.com/help/GPG/jp/jdbc/RSBSalesforcePardot_p_Pagesize.htm
ちなみに、APIに詳しい方であればお気づきかもしれませんが、上記のAPIリクエスト、本来であれば合計6回(レコード件数が1025件なので、200 X 6回で取得が完了)で済むはずが10回リクエストがされています。
これは、同時接続制約のLimitである5を最大限利用し、データ取得効率を上げるために、1回の処理で5リクエストを発行するようにチューニングしているためです。なので実は最後にリクエストされている2つは不要なリクエストとなっています。
もし同時リクエストをするほどデータを取得しない、パフォーマンスはあまり気にしないという場合は「MaxThreads」プロパティを使って調整してみてください。デフォルトでは5になっています。
https://cdn.cdata.com/help/GPG/jp/jdbc/RSBSalesforcePardot_p_MaxThreads.htm
おわりに
Pardot APIの制約周りについて解説してみました。
他にもCData Driver を使ってAPI連携をしている際に気になることがあれば、お気軽にテクニカルサポートフォームまでお問い合わせください。
https://www.cdata.com/jp/support/submit.aspx
関連コンテンツ