Databricks で Salesforce のデータをロードして分析処理を行う:CData JDBC Salesforce Driver

by 杉本和也 | 2020年01月16日

こんにちは。CData Software Japan リードエンジニアの杉本です。

今日はクラウドサービスのビッグデータ処理サービスである Databricks で CData JDBC Driverを利用する方法を紹介します。

Databricks とは?

Databricks は オープンソースの ビッグデータ処理基盤である Apache Spark をクラウドベースで提供しているサービスです。

databricks.com

f:id:sugimomoto:20200116122131p:plain

通常、Apache Sparkやその周辺のエコシステムのツール・フレームワークを自社で導入しようとすると、インフラ周りの構成で煩わしさが多く発生しますが、Databricksを使うことでそういった煩わしさから脱却し、メインとなる分析作業に注力することができるようになります。

また、最近 Databricks は大きな資金調達を行って話題になりました。これからの成長にも期待が高まるビッグデータ処理のクラウドサービスと言えます。

jp.techcrunch.com

本記事のシナリオ

通常 Databricks では、Azure Blob Storage や Data Lakeに存在しているCSV、JSON、Parquetなどのバイナリベースの構造データ、ないしSQL ServerやCosmos DBといったRDB・NoSQLサービスからデータを取り込んで、分析するというアプローチが多いかと思います。

https://docs.microsoft.com/ja-jp/azure/databricks/data/data-sources/

f:id:sugimomoto:20200116122149p:plain

しかしながら、今や分析対象となるデータソースはそういったバイナリデータやRDB・NoSQLのdataにとどまらず、SalesforceやDynamics 365といったクラウドサービス上にも数多く存在しています。

そこで CData JDBC Driverを活用することにより、Databricks から シームレスにクラウドサービスのデータソースをロード、分析できるようになります。

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

f:id:sugimomoto:20200116122155p:plain

この記事では、実際にDatabricksへSalesforceのデータをロードして、分析できるようにするための手順を解説します。

f:id:sugimomoto:20200116122201p:plain

必要なもの

  • CData Salesforce JDBC Driver
  • Databricks Account : 本記事ではAzure Databricksを使用しました。
  • Salesforce Account

CData Salesforce JDBC Driver のインストール

まず、CData Salesforce JDBC Driver をインストールします。トライアルは以下のURLから入手できます。

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

f:id:sugimomoto:20200116122206p:plain

ダウンロード後、exeファイルを実行し、セットアップを進めます。

f:id:sugimomoto:20200116122213p:plain

Databricks に JDBC Driver をインストールする

次に、Databricks の管理画面に移動し、対象のクラスターを選択します。

f:id:sugimomoto:20200116122218p:plain

「Libraries」タブから「Install New」をクリックします。ここから接続に必要なJDBC jarファイルをアップロードします。

f:id:sugimomoto:20200116122225p:plain

JDBC の jarファイルは「C:\Program Files\CData\CData JDBC Driver for Salesforce 2019J\lib」のフォルダに配置されている「cdata.jdbc.salesforce.jar」ファイルです。

f:id:sugimomoto:20200116122231p:plain

「cdata.jdbc.salesforce.jar」をドラッグ・アンド・ドロップして、対象のクラスターにインストールします。

f:id:sugimomoto:20200116122248p:plain

これで、実行準備は完了です。

Notebook で Salesforce データにアクセスする:Python

それでは Notebook を立ち上げて、Salesforce データにアクセスしてみましょう。

今回は Python を使いますが、Scalaでも同様に実行可能です。

f:id:sugimomoto:20200116122254p:plain

LangauageはPythonを選択し、先程JDBCをインストールしたクラスターを選択します。

f:id:sugimomoto:20200116122300p:plain

Notebook が立ち上がったら、以下のコードをそれぞれ実行していきます。

f:id:sugimomoto:20200116122306p:plain

最初に接続情報を定義します。 URLはSalesforceのログイン情報とセキュリティトークンを指定します。

また、CData JDBC Driver用の特殊ライセンスをRTKとして指定します。この入手方法に関してはCData サポート まで連絡ください。

# Step 1: Connection Information

driver = "cdata.jdbc.salesforce.SalesforceDriver"
url = "jdbc:salesforce:User=XXXX;Password=XXXXX;SecurityToken=XXXXX;RTK=XXXX;"
table = "account"

次に先程の接続情報をもとに、CData JDBC Driver経由でSalesforceのデータをデータフレームとして読み込みます。

# Step 2: Reading the data

remote_table = spark.read.format("jdbc")\
  .option("driver", driver)\
  .option("url", url)\
  .option("dbtable", table)\
  .load()

読み込んだ結果は以下のコマンドで確認できます。これでDatabricks上でSalesforceのデータを扱えるようになりました。

# Step 3: Querying the data

display(remote_table.select("name"))

f:id:sugimomoto:20200116122320p:plain

Databricks の SparkSQLでデータを処理したい場合は、Temp Viewとして登録します。

# Step 4: (Optional) Create a view or table

remote_table.createOrReplaceTempView("SAMPLE_VIEW")

以下のように SparkSQLでデータを取得し、分析することができます。

%sql

SELECT Name,AnnualRevenue FROM SAMPLE_VIEW Order by AnnualRevenue desc limit 5 

f:id:sugimomoto:20200116122327p:plain

なお、データフレームは対象のNotebook内だけのデータなので、他のユーザーと一緒に利用する場合はテーブルとして保存しておきましょう。

remote_table.write.format("parquet").saveAsTable("SAMPLE_TABLE")

おわりに

とても手軽に Databricks で Salesforce のデータを扱えることがイメージできたのではないかと思います。

CData では Salesforce 以外にも数多くの JDBC Driver を提供しています。

kintone や Sansan といった日本のクラウドサービスにも対応しているので、是非お好みのデータソースで試してみてください。

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

f:id:sugimomoto:20200116122333p:plain

関連コンテンツ

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

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