Query SAP HANA using Athena Federated Query and join with data in your Amazon S3 data lake
If you use data lakes in Amazon Simple Storage Service (Amazon S3) and use SAP HANA as your transactional data store, you may need to join the data in your data lake with SAP HANA in the cloud, SAP HANA running on Amazon Elastic Compute Cloud (Amazon EC2), or with an on-premises SAP HANA, for example to build a dashboard or create consolidated reporting.
In such use cases, Amazon Athena Federated Query allows you to seamlessly access the data from SAP HANA database without building ETL pipelines to copy or unload the data to the S3 data lake or SAP HANA. This removes the overhead of creating additional extract, transform, and load (ETL) processes and shortens the development cycle.
For this post, we will be using the SAP HANA Athena Federated query connector developed by Trianz. You can deploy the Athena Federated query connector developed by Trianz available in the AWS Serverless Application Repository.
Let’s start with discussing the solution and then detailing the steps involved.
Data federation is the capability to integrate data in another data store using a single interface (Athena). The following diagram depicts how Athena federation works by using Lambda to integrate with a federated data source.
Athena is an interactive query service that makes it easy to analyze data in Amazon S3 using standard SQL. If you have data in sources other than Amazon S3, you can use Athena Federated Query to query the data in place or build pipelines to extract data from multiple data sources and store them in Amazon S3. With Athena Federated Query, you can run SQL queries across data stored in relational, non-relational, object, and custom data sources.
When a federated query is run, Athena identifies the parts of the query that should be routed to the data source connector and executes them with Lambda. The data source connector makes the connection to the source, runs the query, and returns the results to Athena. If the data doesn’t fit into Lambda RAM runtime memory, it spills the data to Amazon S3 and is later accessed by Athena.
Athena uses data source connectors which internally use Lambda to run federated queries. Data source connectors are pre-built and can be deployed from the Athena console or from the Serverless Application Repository. Based on the user submitting the query, connectors can provide or restrict access to specific data elements.
To implement this solution, we complete the following steps:
- Create a secret for the SAP HANA instance using AWS Secrets Manager.
- Create an S3 bucket and subfolder for Lambda to use.
- Configure Athena federation with the SAP HANA instance.
- Run federated queries with Athena.
Before getting started, make sure you have a SAP HANA database up and running on AWS.
Create a secret for the SAP HANA instance
Our first step is to create a secret for the SAP HANA instance with a username and password using Secrets Manager.
- On the Secrets Manager console, choose Secrets.
- Choose Store a new secret.
- Select Other types of secrets.
- Set the credentials as key-value pairs (username, password) for your SAP HANA instance.
- For Secret name, enter a name for your secret. Use the prefix
SAP HANAAFQso it’s easy to find.
- Leave the remaining fields at their defaults and choose Next.
- Complete your secret creation.
Setting up your S3 bucket for Lambda
On the Amazon S3 console, create a new S3 bucket and subfolder for Lambda to use
Configure Athena federation with the SAP HANA instance
To configure Athena federation with your SAP HANA instance, complete the following steps:
- On the AWS Serverless Application Repository console, choose Available applications.
- In the search field, enter
In the Application settings section, provide the following details:
- For Application name, enter
- For SecretNamePrefix, enter
- For SpillBucket, enter
For JDBCConnectorConfig, use the format
- For DisableSpillEncyption, choose False.
- For LambdaFunctionName, enter
- For SecurityGroupID, use the security group id using which lambda can connect to the SAP HANA
Make sure to apply valid inbound and outbound rules based on your connection.
- For SpillPrefix, create a folder under the S3 bucket you created and specify the name (for example,
- For Subnetids – Use the subnets using which lambda can connect to SAP HANA instance with comma separation.
Make sure the subnet is in a VPC and has a NAT gateway and internet gateway attached.
- Select the I acknowledge check box.
- Choose Deploy.
Make sure that the AWS Identity and Access Management (IAM) roles have permissions to access AWS Serverless Application Repository, AWS CloudFormation, Amazon S3, Amazon CloudWatch, Amazon CloudTrail, Secrets Manager, Lambda, and Athena. For more information, see Example IAM Permissions Policies to Allow Athena Federated Query.
Run federated queries with Athena
Run your federated queries using lambda:trsaphana to run against tables in the SAP HANA database. trsaphana is the name of lambda function which we have created in step 7 of previous section of this blog.
lambda:trsaphana is a reference data source connector Lambda function using the format
lambda:MyLambdaFunctionName. For more information, see Writing Federated Queries.
Key performance best practice considerations
If you’re considering Athena federation with a SAP HANA database, we recommend the following best practices:
- Athena federation works great for queries with predicate filtering because the predicates are pushed down to the SAP HANA database. Use filter and limited-range scans in your queries to avoid full table scans.
- If your SQL query requires returning a large volume of data from the SAP HANA database to Athena (which could lead to query timeouts or slow performance), unload the large tables in your query from SAP HANA to your S3 data lake.
- Star schema is a commonly used data model in SAP HANA databases. In the star schema model, unload your large fact tables into your S3 data lake and leave the dimension tables in your SAP HANA database. If large dimension tables are contributing to slow performance or query timeouts, unload those tables to your S3 data lake.
- When you run federated queries, Athena spins up multiple Lambda functions, which causes a spike in database connections. It’s important to monitor the SAP HANA database WLM queue slots to ensure there is no queuing. Additionally, you can use concurrency scaling on your SAP HANA database cluster to benefit from concurrent connections to queue up.
In this post, you learned how to configure and use Athena Federated query with SAP HANA using Lambda. Now you don’t need to wait for all the data in your SAP HANA data warehouse to be unloaded to Amazon S3 and maintained on a day-to-day basis to run your queries.
You can use the best practice considerations outlined in the post to help minimize the data transferred from SAP HANA for better performance. When queries are well-written for Federated query, the performance penalties are negligible.
About the Author
Navnit Shukla is AWS Specialist Solution Architect in Analytics. He is passionate about helping customers uncover insights from their data. He has been building solutions to help organizations make data-driven decisions.