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

こんにちは。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

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

関連コンテンツ