Snowflake データ ソース
はじめに
Snowflake は、データ分析、データ共有、ビジネス インテリジェンス ワークロード向けにスケーラブルなストレージとコンピューティング リソースを提供するクラウドベースのデータ ウェアハウス プラットフォームです。このトピックでは、Reveal アプリケーションで Snowflake データ ソースに接続してデータを視覚化および分析する方法について説明します。
サーバー構成
インストール
- ASP.NET
- Node.js
- Java
手順 1 - Reveal Snowflake コネクタ パッケージをインストールします。
ASP.NET アプリケーションの場合、Snowflake サポートを有効にするには、別の NuGet パッケージをインストールする必要があります。
dotnet add package Reveal.Sdk.Data.Snowflake
手順 2 - アプリケーションに Snowflake データ ソースを登録します。
builder.Services.AddControllers().AddReveal( builder =>
{
builder.DataSources.RegisterSnowflake();
});
Node.js アプリケーションの場合、Snowflake データ ソースはメインの Reveal SDK パッケージに既に含まれています。標準の Reveal SDK セットアップ以外に追加のインストールは必要ありません。
Java アプリケーションの場合、Snowflake データ ソースはメインの Reveal SDK パッケージに既に含まれています。標準の Reveal SDK セットアップ以外に追加のインストールは必要ありません。
接続構成
- ASP.NET
- Java
- Node.js
- Node.js - TS
public class DataSourceProvider : IRVDataSourceProvider
{
public Task<RVDataSourceItem> ChangeDataSourceItemAsync(IRVUserContext userContext, string dashboardId,
RVDataSourceItem dataSourceItem)
{
if (dataSourceItem is RVSnowflakeDataSourceItem snowflakeDataSourceItem)
{
//update underlying data source
ChangeDataSourceAsync(userContext, snowflakeDataSourceItem.DataSource);
//only change the table if we have selected our custom data source item
if (snowflakeDataSourceItem.Id == "MySnowflakeDataSourceItem")
{
snowflakeDataSourceItem.Schema = "TPCDS_SF100TCL";
snowflakeDataSourceItem.Table = "CUSTOMER";
}
}
return Task.FromResult(dataSourceItem);
}
public Task<RVDashboardDataSource> ChangeDataSourceAsync(IRVUserContext userContext,
RVDashboardDataSource dataSource)
{
if (dataSource is RVSnowflakeDataSource snowflakeDataSource)
{
snowflakeDataSource.Account = "your-account";
snowflakeDataSource.Host = "your-account-host";
snowflakeDataSource.Database = "SNOWFLAKE_SAMPLE_DATA";
}
return Task.FromResult(dataSource);
}
}
public class DataSourceProvider implements IRVDataSourceProvider {
public RVDataSourceItem changeDataSourceItem(IRVUserContext userContext, String dashboardsID, RVDataSourceItem dataSourceItem) {
if (dataSourceItem instanceof RVSnowflakeDataSourceItem snowflakeDataSourceItem) {
//update underlying data source
changeDataSource(userContext, dataSourceItem.getDataSource());
//only change the table if we have selected our custom data source item
if (Objects.equals(dataSourceItem.getId(), "MySnowflakeDataSourceItem")) {
snowflakeDataSourceItem.setSchema("TPCDS_SF100TCL");
snowflakeDataSourceItem.setTable("CUSTOMER");
}
}
return dataSourceItem;
}
public RVDashboardDataSource changeDataSource(IRVUserContext userContext, RVDashboardDataSource dataSource) {
if (dataSource instanceof RVSnowflakeDataSource snowflakeDataSource) {
snowflakeDataSource.setAccount("your-account");
snowflakeDataSource.setHost("your-account-host");
snowflakeDataSource.setDatabase("SNOWFLAKE_SAMPLE_DATA");
}
return dataSource;
}
}
const dataSourceItemProvider = async (userContext, dataSourceItem) => {
if (dataSourceItem instanceof reveal.RVSnowflakeDataSourceItem) {
//update underlying data source
dataSourceProvider(userContext, dataSourceItem.dataSource);
//only change the table if we have selected our data source item
if (dataSourceItem.id === "MySnowflakeDataSourceItem") {
dataSourceItem.schema = "TPCDS_SF100TCL";
dataSourceItem.table = "CUSTOMER";
}
}
return dataSourceItem;
}
const dataSourceProvider = async (userContext, dataSource) => {
if (dataSource instanceof reveal.RVSnowflakeDataSource) {
dataSource.account = "your-account";
dataSource.host = "your-account-host";
dataSource.database = "SNOWFLAKE_SAMPLE_DATA";
}
return dataSource;
}
const dataSourceItemProvider = async (userContext: IRVUserContext | null, dataSourceItem: RVDataSourceItem) => {
if (dataSourceItem instanceof RVSnowflakeDataSourceItem) {
//update underlying data source
dataSourceProvider(userContext, dataSourceItem.dataSource);
//only change the table if we have selected our data source item
if (dataSourceItem.id === "MySnowflakeDataSourceItem") {
dataSourceItem.schema = "TPCDS_SF100TCL";
dataSourceItem.table = "CUSTOMER";
}
}
return dataSourceItem;
}
const dataSourceProvider = async (userContext: IRVUserContext | null, dataSource: RVDashboardDataSource) => {
if (dataSource instanceof RVSnowflakeDataSource) {
dataSource.account = "your-account";
dataSource.host = "your-account-host";
dataSource.database = "SNOWFLAKE_SAMPLE_DATA";
}
return dataSource;
}
ChangeDataSourceAsync メソッドでデータ ソースに加えた変更は、ChangeDataSourceItemAsync メソッドには引き継がれません。両方のメソッドでデータ ソースのプロパティを更新する必要があります。上記の例に示すように、ChangeDataSourceItemAsync メソッド内で、データ ソース項目の基になるデータ ソースをパラメーターとして渡して ChangeDataSourceAsync メソッドを呼び出すことをお勧めします。