Amazon Athena Data Source
Introduction
Amazon Athena is an interactive query service that makes it easy to analyze data in Amazon S3 using standard SQL. This topic explains how to connect to Amazon Athena data sources in your Reveal application to visualize and analyze your data.
Server Configuration
Installation
- ASP.NET
- Node.js
- Java
For ASP.NET applications, you need to install a separate NuGet package to enable Amazon Athena support:
dotnet add package Reveal.Sdk.Data.Amazon.Athena
Then register the Amazon Athena provider in your application:
builder.Services.AddControllers().AddReveal( builder =>
{
builder.DataSources.RegisterAmazonAthena();
});
For Node.js applications, the Amazon Athena data source is already included in the main Reveal SDK package. No additional installation is required beyond the standard Reveal SDK setup.
For Java applications, the Amazon Athena data source is already included in the main Reveal SDK package. No additional installation is required beyond the standard Reveal SDK setup.
Connection Configuration
All connection properties for Amazon Athena are configured on the server side through a data source provider implementation.
- 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 RVAthenaDataSourceItem athenaItem)
{
// Configure specific item properties as needed
if (athenaItem.Id == "my-data-source-item")
{
athenaItem.Table = "your_table_name";
}
}
return dataSourceItem;
}
public Task<RVDashboardDataSource> ChangeDataSourceAsync(IRVUserContext userContext, RVDashboardDataSource dataSource)
{
if (dataSource is RVAthenaDataSource athenaDS)
{
// Configure connection properties
athenaDS.Region = "your_region";
athenaDS.Database = "your_database_name";
}
return Task.FromResult(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.RVAthenaDataSourceItem) {
// Configure specific item properties if needed
if (dataSourceItem.id === "my-data-source-item") {
dataSourceItem.table = "your_table_name";
}
}
return dataSourceItem;
}
const dataSourceProvider = async (userContext, dataSource) => {
if (dataSource instanceof reveal.RVAthenaDataSource) {
// Configure connection properties
dataSource.region = "your_region";
dataSource.database = "your_database_name";
}
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 RVAthenaDataSourceItem) {
// Configure specific item properties if needed
if (dataSourceItem.id === "my-data-source-item") {
dataSourceItem.table = "your_table_name";
}
}
return dataSourceItem;
}
const dataSourceProvider = async (userContext: IRVUserContext | null, dataSource: RVDashboardDataSource) => {
if (dataSource instanceof RVAthenaDataSource) {
// Configure connection properties
dataSource.region = "your_region";
dataSource.database = "your_database_name";
}
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, athenaItem.getDataSource());
if (dataSourceItem instanceof RVAthenaDataSourceItem athenaItem) {
// Configure specific item properties if needed
if ("my-data-source-item".equals(athenaItem.getId())) {
athenaItem.setTable("your_table_name");
}
}
return dataSourceItem;
}
public RVDashboardDataSource changeDataSource(IRVUserContext userContext, RVDashboardDataSource dataSource) {
if (dataSource instanceof RVAthenaDataSource athenaDS) {
// Configure connection properties
athenaDS.setRegion("your_region");
athenaDS.setDatabase("your_database_name");
}
return dataSource;
}
}
Any changes made to the data source in the ChangeDataSourceAsync method are not carried over into the ChangeDataSourceItemAsync method. You must update the data source properties in both methods. We recommend calling the ChangeDataSourceAsync method within the ChangeDataSourceItemAsync method passing the data source item's underlying data source as the parameter as shown in the examples above.