Cloud Dataflow × CData JDBC Driver でMarketo のLeadデータをサーバーレスな環境でBigQuery に連携してみる

by 宮本航太 | 2020年11月04日

こんにちは、CData の宮本です!
今回もCloud Dataflow を使った内容をご紹介します。

前回はというと、①CData Connect というSaaS 型のデータハブにDataflow からアクセスして、そこから更に②CData Connect からデータソースにアクセスする2段階の構成をやってみました。

www.cdatablog.jp

ただし、Dataflow ではサードパーティーのJDBC ドライバーを利用できます。
そこで今回はCData JDBC ドライバーを利用してDataflow から直接データソースにアクセスする内容を行ってみたいと思います。

本記事のシナリオ

f:id:sennanvolar44:20201104093813p:plain CData Marketo JDBC ドライバーを使って、Marketo にあるLead データをBigQuery に連携してみます。
Dataflow では今回もJDBC to BigQuery テンプレートを使っていきます。
なお、CData JDBC ドライバーをGCS に格納し、Dataflow からそのJDBC ドライバー経由でMarketo のデータを取得する構成となります。
なので、Marketo 以外のデータソースでもCData が対応しているものであれば使用できます。

必要なもの

  • GCP アカウント(Dataflow、GCS、BigQuery を使用)
  • CData Marketo JDBC ドライバー(30日間の評価版あり。こちらよりダウンロード願います)
    なお、RTK というサーバレスな環境でも使えるライセンスがあるので、「Dataflowで利用したい」とCData サポートへ連絡いただければ、すぐにRTKライセンスをご提供させていただきます。

https://www.cdata.com/jp/support/

手順

それでは下準備として、CData Marketo JDBC ドライバーをGCS にアップロードするところからやっていきましょう。

Marketo ドライバーのダウンロード & アップロード

f:id:sennanvolar44:20201022232556p:plain CData Marketo JDBC ドライバーのダウンロードは以下のURLより行えます。
評価版であれば機能制限なしで30日間無料でお使いいただけます。

https://www.cdata.com/jp/drivers/marketo/jdbc/

ダウンロード後、GCSに"cdata.jdbc.marketo.jar" をアップロードします。今回はcdatadriver というバケットを作成し、その直下にアップロードしました。
ついでに、Dataflow の作業ディレクトリもこのタイミングで作成してしまいます。temp、temp2 というフォルダを作成しました。
f:id:sennanvolar44:20201022233120p:plain

Marketo ドライバーを利用して事前にデータを確認

ダウンロードしたJDBC ドライバーは、DBVisualizer などのDB 接続ツールで使うことができます。
DBVisualizer のダウンロードはこちら↓↓
www.dbvis.com

Marketo JDBC Driver のヘルプドキュメントにも例はありますが、接続時に使用する接続文字列は以下のような形式で設定します。

jdbc:marketo:Schema=REST;RESTEndpoint=https://XXX-XXX-XXX.mktorest.com/rest;OAuthClientID=XXXXXX;OAuthClientSecret=XXXXXX;InitiateOAuth=GETANDREFRESH;

実際に接続してみると、このようにMarketo のデータがRDBライクに参照することができます。
f:id:sennanvolar44:20201022235019p:plain

ここでDataflow で実行したいSQL などを確認しておくと良いです。

今回はMarketo のLead テーブルにあるサンプルデータをBigQuery に連携してみますが、全項目ではなく、以下のようにいくつかの項目に絞ってやっていきます。

select Id,company,Website,NumberOfEmployees,Industry,MktoCompanyNotes,AnnualRevenue,
FirstName,MiddleName,LastName,Email,Phone,MobilePhone,Fax,Address,
cast(CreatedAt as varchar) as CreatedAt,cast(UpdatedAt as varchar) as UpdatedAt 
from Leads

BigQuery に使用するテーブルを事前に作成しておく

データの型まで合わせた状態で、BigQuery に連携用テーブルを作成します。
データ型の確認は先ほどのようにDBVisualizer などのDB 接続ツールで確認するか、ヘルプを参照ください。

http://cdn.cdata.com/help/DKF/jp/jdbc/pg_resttable-leads.htm

BigQuery にテーブルを作成しましたら次に進みます。
f:id:sennanvolar44:20201023163624p:plain

CData JDBC Driver をクラウドサービス上で利用する場合

クラウドサービスなどにJDBC ドライバーをアップロードして使用する場合には、RTK というライセンスを使用する必要があります。
ただ、RTK についてはCData サポートチームから直接ご提供させていただくことになりますので、以下のサポートフォームより「Cloud Dataflow で使用したい」とお問合せくださいませ。

https://www.cdata.com/jp/support/

Dataflow でジョブの作成

それではDataflow の設定を行っていきましょう。
まずは、サイドメニューよりDataflow を選択し、「テンプレートからジョブを作成」をクリックします。 f:id:sennanvolar44:20201021235315p:plain

ジョブ名、リージョンの設定し、Dataflow テンプレートでは「Jdbc to BigQuery」 を選択します。 f:id:sennanvolar44:20201021235522p:plain

必須パラメータにそれぞれ以下の内容を設定します。
f:id:sennanvolar44:20201023165555p:plain

入力例

  • 接続文字列:
    jdbc:marketo:Schema=REST;RESTEndpoint=https://XXX-XXX-XXX.mktorest.com/rest;OAuthClientID=XXXXX;OAuthClientSecret=XXXXX;InitiateOAuth=GETANDREFRESH;RTK=XXXXXXX
    ※RTKにはサポートチームより受領したKeyをセット

  • ドライバークラス:
    cdata.jdbc.marketo.MarketoDriver

  • クエリ:
    select Id,company,Website,MainPhone,AnnualRevenue,NumberOfEmployees,Industry,MktoCompanyNotes,FirstName,MiddleName,LastName,Email,Phone,MobilePhone,Fax,Address,cast(CreatedAt as varchar) as CreatedAt,cast(UpdatedAt as varchar) as UpdatedAt from Leads
    (日時型の項目のままにしてしまうと、内部でUnixタイムに変換されてBigQuery にインサートする際に失敗していまいますので、文字列にキャストしておきます)

  • BigQuery の連携先テーブル:
    dataflow-cdata:demo.marketo_leads

  • CData JDBC ドライバーのパス:
    gs://cdatadriver/cdata.jdbc.marketo.jar

  • Dataflow のワーキングディレクトリ:
    gs://cdatadriver/temp
    gs://cdatadriver/temp2

設定はこれだけですので、画面下部より実行ボタンをおして実際に連携をしてみます。

Dataflow でジョブを実行

ジョブ実行ボタンクリック後、少し待つとこのようにジョブステータスに完了しましたのメッセージが表示されます。
f:id:sennanvolar44:20201023183338p:plain

BigQuery のコンソールを見てみると、Marketo にあるLeadデータがBigQuery に連携されているのが確認できました。
f:id:sennanvolar44:20201023184531p:plain

ただ、これだけだとDataflow を実行するたびに同じLead データが蓄積されてしまいますので、必要であれば以下の方法などで実行タイミングの時刻を項目として追加して、連携データをグルーピングすることも可能です。

select cast(CURRENT_TIMESTAMP() as varchar) as dataflow_execute, * from Leads

おわりに

いかがでしたでしょうか。Cloud Dataflow のJDBC テンプレートでCData JDBC Driver を利用する方法をご紹介いたしました。今回はMarketo Driver を試しましたが、他にもSalesforce やスマレジ などCData JDBC Driver が対応しているデータソースであれば利用可能です。

www.cdata.com

次回はOAuthのブラウザ認証が必要なデータソースをDataflow のJDBCテンプレートで利用する方法をご紹介したいと思います。

関連コンテンツ

トライアル・お問い合わせ

30日間無償トライアルで、CData のリアルタイムデータ連携をフルにお試しいただけます。記事や製品についてのご質問があればお気軽にお問い合わせください。