こんにちは、CData の宮本です!
今回もCloud Dataflow を使った内容をご紹介します。
前回はというと、①CData Connect というSaaS 型のデータハブにDataflow からアクセスして、そこから更に②CData Connect からデータソースにアクセスする2段階の構成をやってみました。
ただし、Dataflow ではサードパーティーのJDBC ドライバーを利用できます。
そこで今回はCData JDBC ドライバーを利用してDataflow から直接データソースにアクセスする内容を行ってみたいと思います。
本記事のシナリオ
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 ドライバーのダウンロード & アップロード
CData Marketo JDBC ドライバーのダウンロードは以下のURLより行えます。
評価版であれば機能制限なしで30日間無料でお使いいただけます。
https://www.cdata.com/jp/drivers/marketo/jdbc/
ダウンロード後、GCSに"cdata.jdbc.marketo.jar" をアップロードします。今回はcdatadriver というバケットを作成し、その直下にアップロードしました。
ついでに、Dataflow の作業ディレクトリもこのタイミングで作成してしまいます。temp、temp2 というフォルダを作成しました。
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ライクに参照することができます。
ここで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 にテーブルを作成しましたら次に進みます。
CData JDBC Driver をクラウドサービス上で利用する場合
クラウドサービスなどにJDBC ドライバーをアップロードして使用する場合には、RTK というライセンスを使用する必要があります。
ただ、RTK についてはCData サポートチームから直接ご提供させていただくことになりますので、以下のサポートフォームより「Cloud Dataflow で使用したい」とお問合せくださいませ。
https://www.cdata.com/jp/support/
Dataflow でジョブの作成
それではDataflow の設定を行っていきましょう。
まずは、サイドメニューよりDataflow を選択し、「テンプレートからジョブを作成」をクリックします。
ジョブ名、リージョンの設定し、Dataflow テンプレートでは「Jdbc to BigQuery」 を選択します。
必須パラメータにそれぞれ以下の内容を設定します。
入力例
接続文字列:
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_leadsCData JDBC ドライバーのパス:
gs://cdatadriver/cdata.jdbc.marketo.jarDataflow のワーキングディレクトリ:
gs://cdatadriver/temp
gs://cdatadriver/temp2
設定はこれだけですので、画面下部より実行ボタンをおして実際に連携をしてみます。
Dataflow でジョブを実行
ジョブ実行ボタンクリック後、少し待つとこのようにジョブステータスに完了しましたのメッセージが表示されます。
BigQuery のコンソールを見てみると、Marketo にあるLeadデータがBigQuery に連携されているのが確認できました。
ただ、これだけだと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 が対応しているデータソースであれば利用可能です。
次回はOAuthのブラウザ認証が必要なデータソースをDataflow のJDBCテンプレートで利用する方法をご紹介したいと思います。