こんにちは、プロダクトチームの宮本です!
「Marketo に格納されているアクティビティデータをBigQuery にレプリケーションしたいんだけどうまくいきません!」というお問合せをよくいただきます。Marketo などのようにデータソース側にデータが大量にある場合は、初期移行で引っ掛かってしまい先に進めないケースが結構多いです。
ということで、今回は CData Sync を活用したMarketo アクティビティデータ初期移行のベストプラクティスをご紹介いたします。
本記事の3行サマリー✅
- Marketo 初期移行でよく遭遇するタイムアウトエラーや長時間実行の改善方法について知る
- 全体の取得開始終了日の指定や一度に取得する期間をジョブオプションで指定する
- 初期移行は手動かつ細切れで行う
それではまずはどういった引っ掛かりがあるのか見ていきましょう。
Marketo データの初期移行でつまづくポイント
だいたい下記の2つに絞られます。
- タイムアウトエラー
- ジョブが終了しない
1のタイムアウトエラーについては同期先DBでのエラーになります。デフォルトではジョブオプションのコマンドタイムアウトが 300 秒で設定されているため、Marketo からのレスポンスが 300 秒を超えて返ってきた場合は同期先DBでタイムアウトが発生します。ただし、高度な設定のコマンドタイムアウト値を指定することでタイムアウトでのエラーが発生しないように調整することが可能です。
次に2のジョブが終了しない問題です。タイムアウト問題をクリアし改めてレプリケーションジョブを実行すると、今度は数時間待っても実行中のまま処理が終わらなくなる場合があります。これはそもそもMarketo 側から返されるレコードが大量にあることとともに、デフォルト設定では2005-01-01から180 日間隔 & 取得したアクティビティタイプ(Fill Out Formや、Click Linkなどが定義されているID)を最大10個で1リクエストとし、タイプIDの件数によってリクエスト回数が余計に増えるため、現在日時までの一括取得だと相当な回数をリクエストするためジョブがなかなか終わらないという結果につながります。
とは言え、CData Sync において下記手段で解決することができます。
- CData Sync のジョブオプションでリクエスト内容を調整する
⇒これは次の章で詳しく解説します!
- アクティビティタイプを限定し、レプリケートタスクの条件で指定する
⇒事前に取得したいタイプがわかるならクエリのWhere句で指定する方が〇
- バルクAPI を利用する
⇒バルクAPI 自体はどのライセンスでも利用することができるようですが、更新日時でのフィルタリングについては契約プランによるようで、利用できるユーザーは限定的といえそうです。また、一日最大500MBまでのエクスポートということで、初期移行の場合は対応できないケースが多いかもしれません。
Filter type is unavailable for some subscriptions. If unavailable for your subscription, you will receive an error when calling the Create Export Lead Job endpoint (“1035, Unsupported filter type for target subscription”). Customers may contact Marketo Support to have this functionality enabled in their subscription.
https://developers.marketo.com/rest-api/bulk-extract/bulk-lead-extract/
初期移行に有効なジョブオプションについて
それでは一つ前の章で出た「CData Sync のジョブオプションでリクエスト内容を調整する」について解説していきます。
先にお伝えすると、これら3つのジョブオプションを組み合わせて初期移行を進めていきます。
- ①レプリケート開始日
- ②レプリケート間隔
- ③レプリケート終了日
さらにこのオプションを駆使しながら、Marketro から取得するデータを1年単位ごとで完結するようにします(2020年のデータ、2021年のデータというように)。
手動でジョブ実行になりますがこれで初期移行を細切れに行うことができ、結果、スタートラインまでスムーズに整えることができるようになります。
では、まず①レプリケート開始日についてです。
つまづきポイントでも言いましたが、デフォルトでは 2005-01-01 からリクエストをしていきます。ただ、取得対象は2022 年以降などの場合、レプリケート開始日を指定することで最初からその指定した日以降でMarketo から取得しにいくようになりますので、余計なリクエストを抑えることができます。
次に②レプリケート間隔です。設定箇所は開始日の下にあります。デフォルトでは180日間での期間指定でMarekto からデータを取得しにいきますが、
180 日間ではレコードが大量にありすぎて結局同期先DBでのコマンドタイムアウトの値を超過してしまう可能性があります。
そんなときは、例えば半分の 90 日間括りでデータを取得するように指定することで同期先DBへのアクセスを早め、結果的にはタイムアウトを防ぐことができるようになってます。
※90日間にすると、180 日間指定よりリクエスト回数は増えます。
③最後にレプリケート終了日についてです。オプション名はReplicateEndDate で、開始日と同じように日付を指定します。
このオプションを指定すると、指定した日付までのレプリケート処理となりますので、1年ごとなどのように細切れにレプリケートタスクを行う上では必ず指定する必要があるジョブオプションになります。ちなみにこのオプションの指定方法は、高度なジョブオプションの追加オプションで指定するようになります。
初期移行サンプルジョブ
例えば2021年以降のデータを対象とし、1年ごとに細切れにジョブを実行したい場合は下記のような指定となります。
初回レプリケートタスク
- レプリケート開始日:2021-01-01
- レプリケート間隔:一旦デフォルト180日
- レプリケート終了日(ReplicateEndDate):2021-12-31
2回目レプリケートタスク
- レプリケート開始日:2022-01-01
- レプリケート間隔:一旦デフォルト180日
- レプリケート終了日(ReplicateEndDate):2022-12-31
3回目レプリケートタスク
- レプリケート開始日:2023-01-01
- レプリケート間隔:一旦デフォルト180日
- レプリケート終了日(ReplicateEndDate):未指定
これで今後は3回目レプリケートタスクで取り込んだ最終データの更新日時をもとに差分抽出・更新が行われるようになりますので、スケジューリング設定をしてしまえば運用ジョブとして登録することができると思います。
まとめ
いかがでしたでしょうか。Marketo のアクティビティデータなどをデータウェアハウスに連携したいニーズはよくありますが、実は結構引っ掛かりポイントがあり、そして対応方法もいくつか存在していました。
加えて、CData Sync にはさまざまなジョブオプションが用意されていますので、もし何かジョブまわりの再設定が必要な場合には下記ヘルプもご参照ください。
https://cdn.cdata.com/help/ASJ/jp/sync/Advanced-Job-Options.html
今回ご紹介しましたCdData Sync は30 日間の無償トライアル利用が可能、かつトライアル中からテクニカルサポートチームに日本語で問合せを行うことができます!
ぜひお試しください!
https://www.cdata.com/jp/sync
関連コンテンツ