Databricks データ ソース
概要
Databricks は、データ エンジニアリング チームとデータ サイエンス チームが大規模なデータ処理、機械学習、分析を共同で行うことができる統合分析プラットフォームです。このトピックでは、Reveal アプリケーションで Databricks データ ソースに接続して、データを視覚化および分析する方法について説明します。
Reveal で Databricks データ ソースを構成する前に、適切なデータベース ドライバーをインストールする必要があります。
- Windows/.NET の場合: Databricks ODBC ドライバー
- Node.js の場合: Databricks ODBC ドライバー
- Java の場合: JDBC ドライバーは Maven 経由で自動的にインストールされます。
これらのドライバーは、Databricks データ ソースへの接続を確立するために不可欠です。インストール後、Databricks のドキュメントに従ってドライバーが適切に構成されていることを確認します。
サーバーの構成
インストール
- ASP.NET
- Node.js
- Java
手順 1 - Reveal Databricks コネクタ パッケージをインストールします。
ASP.NET アプリケーションの場合、Databricks サポートを有効にするには、別の NuGet パッケージをインストールする必要があります。
dotnet add package Reveal.Sdk.Data.Databricks
手順 2 - アプリケーションに Databricks データ ソースを登録します。
builder.Services.AddControllers().AddReveal( builder =>
{
builder.DataSources.RegisterDatabricks();
});
Node.js アプリケーションの場合、Databricks データ ソースはメインの Reveal SDK パッケージに既に含まれています。標準の Reveal SDK セットアップ以外に追加のインストールは必要ありません。
Java アプリケーションの場合、Databricks データ ソースはメインの Reveal SDK パッケージに既に含まれています。標準の Reveal SDK セットアップ以外に追加のインストールは必要ありません。
Databricks JDBC ドライバーは Apache Arrow をサポートしています。Java JVM バージョン 11 以降を使用す る場合は、JVM 引数に --add-opens java.base/java.nio=ALL-UNNAMED という行を追加してください。この JVM 引数がない場合、ドライバーは動作しません。
JVM 引数を設定するには、pom.xml ファイルに以下を追加してください:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<jvmArguments>--add-opens java.base/java.nio=ALL-UNNAMED</jvmArguments>
</configuration>
</plugin>
この方法は一例です。他にも設定方法は多数ありますので、詳細は関連ドキュメントをご確認ください。
接続の構成
- ASP.NET
- Node.js
- Node.js - TS
- Java
// Create a data source provider
public class DataSourceProvider : IRVDataSourceProvider
{
public async Task<RVDataSourceItem> ChangeDataSourceItemAsync(IRVUserContext userContext, string dashboardId, RVDataSourceItem dataSourceItem)
{
// Required: Update the underlying data source
await ChangeDataSourceAsync(userContext, dataSourceItem.DataSource);
if (dataSourceItem is RVDatabricksDataSourceItem databricksItem)
{
// Configure specific item properties as needed
if (databricksItem.Id == "databricks_sales_data")
{
databricksItem.Table = "sales_data";
}
}
return dataSourceItem;
}
public Task<RVDashboardDataSource> ChangeDataSourceAsync(IRVUserContext userContext, RVDashboardDataSource dataSource)
{
if (dataSource is RVDatabricksDataSource databricksDS)
{
// Configure connection properties
databricksDS.Host = "your-databricks-instance.cloud.databricks.com";
databricksDS.HttpPath = "/sql/1.0/warehouses/abc123";
databricksDS.Port = 443;
databricksDS.Database = "default";
databricksDS.Schema = "public";
}
return dataSource;
}
}
// Create data source providers
const dataSourceItemProvider = async (userContext, dataSourceItem) => {
// Required: Update the underlying data source
await dataSourceProvider(userContext, dataSourceItem.dataSource);
if (dataSourceItem instanceof reveal.RVDatabricksDataSourceItem) {
// Configure specific item properties if needed
if (dataSourceItem.id === "databricks_sales_data") {
dataSourceItem.table = "sales_data";
}
}
return dataSourceItem;
}
const dataSourceProvider = async (userContext, dataSource) => {
if (dataSource instanceof reveal.RVDatabricksDataSource) {
// Configure connection properties
dataSource.host = "your-databricks-instance.cloud.databricks.com";
dataSource.httpPath = "/sql/1.0/warehouses/abc123";
dataSource.port = 443;
dataSource.database = "default";
dataSource.schema = "public";
}
return dataSource;
}
// Create data source providers
const dataSourceItemProvider = async (userContext: IRVUserContext | null, dataSourceItem: RVDataSourceItem) => {
// Required: Update the underlying data source
await dataSourceProvider(userContext, dataSourceItem.dataSource);
if (dataSourceItem instanceof RVDatabricksDataSourceItem) {
// Configure specific item properties if needed
if (dataSourceItem.id === "databricks_sales_data") {
dataSourceItem.table = "sales_data";
}
}
return dataSourceItem;
}
const dataSourceProvider = async (userContext: IRVUserContext | null, dataSource: RVDashboardDataSource) => {
if (dataSource instanceof RVDatabricksDataSource) {
// Configure connection properties
dataSource.host = "your-databricks-instance.cloud.databricks.com";
dataSource.httpPath = "/sql/1.0/warehouses/abc123";
dataSource.port = 443;
dataSource.database = "default";
dataSource.schema = "public";
}
return dataSource;
}
// Create a data source provider
public class DataSourceProvider implements IRVDataSourceProvider {
public RVDataSourceItem changeDataSourceItem(IRVUserContext userContext, String dashboardId, RVDataSourceItem dataSourceItem) {
// Required: Update the underlying data source
changeDataSource(userContext, databricksItem.getDataSource());
if (dataSourceItem instanceof RVDatabricksDataSourceItem databricksItem) {
// Configure specific item properties if needed
if ("databricks_sales_data".equals(databricksItem.getId())) {
databricksItem.setTable("sales_data");
}
}
return dataSourceItem;
}
public RVDashboardDataSource changeDataSource(IRVUserContext userContext, RVDashboardDataSource dataSource) {
if (dataSource instanceof RVDatabricksDataSource databricksDS) {
// Configure connection properties
databricksDS.setHost("your-databricks-instance.cloud.databricks.com");
databricksDS.setHttpPath("/sql/1.0/warehouses/abc123");
databricksDS.setPort(443);
databricksDS.setDatabase("default");
databricksDS.setSchema("public");
}
return dataSource;
}
}
ChangeDataSourceAsync メソッドでデータ ソースに加えられた変更は、ChangeDataSourceItemAsync メソッドには引き継がれません。どちらの方法でも、データ ソース プロパティを更新する必要があります。上記の例に示すように、ChangeDataSourceItemAsync メソッド内で ChangeDataSourceAsync メソッドを呼び出し、データ ソース項目の基になるデータ ソースをパラメーターとして渡すことをお勧めします。
認証
Databricks の認証は、個人アクセス トークンを使用してサーバー側で処理されます。認証オプションの詳細については、「認証」トピックを参照してください。
- ASP.NET
- Node.js
- Node.js - TS
- Java
public class AuthenticationProvider: IRVAuthenticationProvider
{
public Task<IRVDataSourceCredential> ResolveCredentialsAsync(IRVUserContext userContext, RVDashboardDataSource dataSource)
{
IRVDataSourceCredential userCredential = null;
if (dataSource is RVDatabricksDataSource)
{
// Use Personal Access Token
userCredential = new RVBearerTokenDataSourceCredential("your_personal_access_token", "your_userid");
}
return Task.FromResult<IRVDataSourceCredential>(userCredential);
}
}
const authenticationProvider = async (userContext, dataSource) => {
if (dataSource instanceof reveal.RVDatabricksDataSource) {
// Use Personal Access Token
return new reveal.RVBearerTokenDataSourceCredential("your_personal_access_token", "your_userid");
}
return null;
}
const authenticationProvider = async (userContext: IRVUserContext | null, dataSource: RVDashboardDataSource) => {
if (dataSource instanceof RVDatabricksDataSource) {
// Use Personal Access Token
return new RVBearerTokenDataSourceCredential("your_personal_access_token", "your_userid");
}
return null;
}
public class AuthenticationProvider implements IRVAuthenticationProvider {
@Override
public IRVDataSourceCredential resolveCredentials(IRVUserContext userContext, RVDashboardDataSource dataSource) {
if (dataSource instanceof RVDatabricksDataSource) {
// Use Personal Access Token
return new RVBearerTokenDataSourceCredential("your_personal_access_token", "your_userid");
}
return null;
}
}
クライアント側の実装
クライアント側では、データ ソースの ID、タイトル、サブタイトルなどの基本プロパティを指定するだけです。実際の接続構成はサーバー上で行われます。
データ ソースの作成
手順 1 - RevealView.onDataSourcesRequested イベントのイベント ハンドラーを追加します。
const revealView = new $.ig.RevealView("#revealView");
revealView.onDataSourcesRequested = (callback) => {
// Add data source here
callback(new $.ig.RevealDataSources([], [], false));
};
手順 2 - RevealView.onDataSourcesRequested イベント ハンドラーで、RVDatabricksDataSource オブジェクトの新しいインスタンスを作成します。title と subtitle プロパティを設定します。RVDatabricksDataSource オブジェクトを作成したら、それをデータ ソース コレクションに追加します。
revealView.onDataSourcesRequested = (callback) => {
const databricksDS = new $.ig.RVDatabricksDataSource();
databricksDS.title = "Databricks";
databricksDS.subtitle = "Data Source";
callback(new $.ig.RevealDataSources([databricksDS], [], false));
};
アプリケーションが実行されたら、新しい可視化を作成すると、新しく作成された Databricks データ ソースが [データ ソースの選択] ダイアログに表示されます。

データ ソース項目の作成
データ ソース項目は、ユーザーが表示形式のために選択できる Databricks データ ソース内の特定のデータセットを表します。クライアント側では、ID、タイトル、サブタイトルを指定するだけです。
revealView.onDataSourcesRequested = (callback) => {
// Create the data source
const databricksDS = new $.ig.RVDatabricksDataSource();
databricksDS.title = "My Databricks Datasource";
databricksDS.subtitle = "Databricks";
// Create a data source item
const databricksDSI = new $.ig.RVDatabricksDataSourceItem(databricksDS);
databricksDSI.id = "databricks_sales_data";
databricksDSI.title = "My Databricks Datasource Item";
databricksDSI.subtitle = "Databricks";
callback(new $.ig.RevealDataSources([databricksDS], [databricksDSI], false));
};
アプリケーションが実行されたら、新しい可視化を作成すると、新しく作成された Databricks データ ソース項目が [データ ソースの選択] ダイアログに表示されます。

その他のリソース
API リファレンス
- ASP.NET
- Node.js
- RVDatabricksDataSource - Databricks データ ソースを表します
- RVDatabricksDataSourceItem - Databricks データ ソース項目を表します
- RVDatabricksDataSource - Databricks データ ソースを表します
- RVDatabricksDataSourceItem - Databricks データ ソース項目を表します