Spring Boot からDatabricks のデータに接続する方法
Spring Boot は、Java Web アプリケーションの開発を容易にするフレームワークです。 最小限の設定でスタンドアロンアプリケーションを作成できるのが特徴です。 CData JDBC Driver for Databricks と組み合わせることで、Spring Boot からリアルタイムのDatabricks のデータを扱えるようになります。 この記事では、CData JDBC Driver for Databricks を使用してSpring Boot アプリケーションでデータソースを設定し、データを取得する方法を説明します。
ビルトインの最適化されたデータ処理機能により、CData JDBC Driver は リアルタイムのDatabricks のデータとのやり取りにおいて比類のないパフォーマンスを発揮します。Databricks に 複雑なSQL クエリを発行すると、ドライバーはフィルタや集計などのサポートされている SQL 操作を直接Databricks にプッシュし、サポートされていない操作(多くの場合SQL 関数や JOIN 操作)は組み込みのSQL エンジンを利用してクライアント側で処理します。 組み込みの動的メタデータクエリにより、ネイティブのデータ型を使用して Databricks のデータを操作・分析できます。
Databricks データ連携について
CData を使用すれば、Databricks のライブデータへのアクセスと統合がこれまでになく簡単になります。お客様は CData の接続機能を以下の目的で利用しています:
- Runtime バージョン 9.1 - 13.X から Pro および Classic Databricks SQL バージョンまで、すべてのバージョンの Databricks にアクセスできます。
- あらゆるホスティングソリューションとの互換性により、お好みの環境で Databricks を使用し続けることができます。
- パーソナルアクセストークン、Azure サービスプリンシパル、Azure AD など、さまざまな方法で安全に認証できます。
- Databricks ファイルシステム、Azure Blob ストレージ、AWS S3 ストレージを使用して Databricks にデータをアップロードできます。
多くのお客様が、さまざまなシステムから Databricks データレイクハウスにデータを移行するために CData のソリューションを使用していますが、ライブ接続ソリューションを使用して、データベースと Databricks 間の接続をフェデレートしているお客様も多数います。これらのお客様は、SQL Server リンクサーバーまたは Polybase を使用して、既存の RDBMS 内から Databricks へのライブアクセスを実現しています。
一般的な Databricks のユースケースと CData のソリューションがデータの問題解決にどのように役立つかについては、ブログをご覧ください:What is Databricks Used For? 6 Use Cases
はじめに
Java でSpring Boot プロジェクトを作成
IDE(このチュートリアルではIntelliJ を使用)で、Maven プロジェクトを選択します:
生成されたプロジェクトで、pom.xml ファイルを開き、Spring Boot に必要な依存関係を追加します:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.2</version> <relativePath/> </parent> <groupId>com.example</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-install-plugin</artifactId> <version>2.5.1</version> <executions> <execution> <id>id.install-file</id> <phase>clean</phase> <goals> <goal>install-file</goal> </goals> <configuration> <file>C:\Program Files\CData[product_name] ####\lib\cdata.jdbc.databricks.jar</file> <groupId>org.cdata.connectors</groupId> <artifactId>cdata-databricks-connector</artifactId> <version>23</version> <packaging>jar</packaging> </configuration> </execution> </executions> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> <version>2.7.0</version> </dependency> <dependency> <groupId>org.cdata.connectors</groupId> <artifactId>cdata-databricks-connector</artifactId> <version>23</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <distributionManagement> <repository> <uniqueVersion>false</uniqueVersion> <id>test</id> <name>My Repository</name> <url>scp://repo/maven2</url> <layout>default</layout> </repository> </distributionManagement> </project>
Note: 年(####)とバージョン番号(上記のXML スクリプトに記載)は、使用しているCData JDBC Driver の現在のバージョンに合わせて調整してください。
プロジェクト構造
java ディレクトリに新しいパッケージを作成します。通常、パッケージ名はgroupId
(com.example)の後にartifactId(.MDS)を付けたものになります。
「java」ディレクトリを「Sources Root」としてマーク(青色で表示)します。これを行うには、java ディレクトリを右クリックし、「Mark Directory as」->「Sources Root」を選択します(以下を参照)。また、「resources」ディレクトリを「Resources Root」としてマークします。
データベース接続プロパティの保存
データベース接続プロパティを保存するための「application.properties」ファイルを作成します。これを行うには、「resources」フォルダを右クリックし、「New」->「File」を選択し、ファイル名を「application.properties」と入力してEnter を押します。
application.properties ファイルで、クラス名とJDBC URL を使用してDatabricks JDBC Driver の設定プロパティを設定します:
spring.datasource.driver=cdata.jdbc.databricks.DatabricksDriver spring.datasource.url=jdbc:databricks:Server=127.0.0.1;HTTPPath=MyHTTPPath;User=MyUser;Token=MyToken;
組み込みの接続文字列デザイナー
JDBC URL の作成については、Databricks JDBC Driver に組み込まれている接続文字列デザイナーを使用してください。JAR ファイルをダブルクリックするか、コマンドラインからjar ファイルを実行します。
java -jar cdata.jdbc.databricks.jar
Databricks 接続プロパティの取得・設定方法
Databricks クラスターに接続するには、以下のプロパティを設定します。
- Database:Databricks データベース名。
- Server:Databricks クラスターのサーバーのホスト名。
- HTTPPath:Databricks クラスターのHTTP パス。
- Token:個人用アクセストークン。この値は、Databricks インスタンスのユーザー設定ページに移動してアクセストークンタブを選択することで取得できます。
Databricks への認証
CData は、次の認証スキームをサポートしています。
- 個人用アクセストークン
- Microsoft Entra ID(Azure AD)
- Azure サービスプリンシパル
- OAuthU2M
- OAuthM2M
個人用アクセストークン
認証するには、次を設定します。
- AuthScheme:PersonalAccessToken。
- Token:Databricks サーバーへの接続に使用するトークン。Databricks インスタンスのユーザー設定ページに移動してアクセストークンタブを選択することで取得できます。
その他の認証方法については、ヘルプドキュメント の「はじめに」セクションを参照してください。
application.properties ファイルでプロパティを設定したら、次にそれらを構成します。
データソースの設定
まず、Databricks データソースをプライマリデータソースとしてマークします。次に、データソースBean を作成します。
DriverManagerDataSource.java ファイルを作成し、以下のようにBean を作成します。@Bean でエラーが発生する場合、 Spring Boot が正しくロードされていない可能性があります。これを修正するには、「File」->「Invalidate Caches」でキャッシュを無効にして再起動します。 また、Maven がSpring Boot の依存関係を追加していることを確認してください。
データソースBean を作成するには、DriverManagerDataSource クラスを使用します。このクラスを使用すると、
データソースのプロパティを設定できます。このJava クラスを作成するには、「com.example.MDS」パッケージを右クリックし、「New」->「Java Class」を選択します。
以下のコードは、データソースのBean 定義を示しています。各ドライバーにはBean が必要です。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Primary;
import org.springframework.core.env.Environment;
import javax.sql.DataSource;
public class DriverManagerDataSource{
@Autowired
private static Environment env;
@Bean(name ="Databricks")
@Primary
public static DataSource DatabricksDataSource()
{
DataSourceBuilder<?> dataSourceBuilder = DataSourceBuilder.create();
dataSourceBuilder.driverClassName("cdata.jdbc.databricks.DatabricksDriver");
dataSourceBuilder.url("jdbc:databricks:Server=127.0.0.1;HTTPPath=MyHTTPPath;User=MyUser;Token=MyToken;");
return dataSourceBuilder.build();
}
//@Override
public void setEnvironment( final Environment environment) {
env=environment;
}
}
次に、Databricks jar ファイルをDocuments フォルダに移動します(以下のコマンドのパスを参照)。jar ファイルのパスにスペースが含まれないようにするためです。次に、
Maven アイコン(IntelliJ の右上隅)をクリックし、「Execute Maven Goal」をクリックします。以下のコマンドを実行します:
mvn install:install-file "-Dfile=C:\Program Files\CData[product_name] ####\lib\cdata.jdbc.databricks.jar" -DgroupId=org.cdata.connectors -DartifactId=cdata-databricks-connector -Dversion=23 -Dpackaging=jar
このコマンドを実行するには、以下のいずれかの手順に従ってください:
- 「-Dfile location」はCData JDBC Driver のデフォルトのインストールパスのままにできます。この場合、パスを引用符で囲んでください。また、使用しているドライバーの現在のバージョンに基づいて年と「Dversion」を変更してください。
- 記事の前半で述べたように、
jar ファイルをDocuments フォルダに移動した場合は、提供されたコマンドのパスを変更してください。この場合、Dfile location を引用符で囲まないでください。使用しているドライバーの現在のバージョンに基づいて「Dversion」を編集してください。
Enter を押すと、以下の出力が表示されます:
接続のテスト
最後のステップは接続のテストです。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import java.sql.Connection;
import java.sql.SQLException;
import static com.example.demo.DriverManagerDataSources.DatabricksDataSource;
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class MDSApplication {
//remove the comment on the line below
public static void main (){
SpringApplication.run(DemoApplication.class, args);
Connection conn = DatabricksDataSource().getConnection();
System.out.println("Catalog: "+ conn.getCatalog());
}
}
生成される出力は以下のようになります:
無償トライアルと詳細情報
CData JDBC Driver for Databricks の30日間の無償トライアルをダウンロードして、Spring Boot でリアルタイムのDatabricks データを使い始めましょう。