DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
Refcards Trend Reports
Events Video Library
Over 2 million developers have joined DZone. Join Today! Thanks for visiting DZone today,
Edit Profile Manage Email Subscriptions Moderation Admin Console How to Post to DZone Article Submission Guidelines
View Profile
Sign Out
Refcards
Trend Reports
Events
View Events Video Library
Zones
Culture and Methodologies Agile Career Development Methodologies Team Management
Data Engineering AI/ML Big Data Data Databases IoT
Software Design and Architecture Cloud Architecture Containers Integration Microservices Performance Security
Coding Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
Culture and Methodologies
Agile Career Development Methodologies Team Management
Data Engineering
AI/ML Big Data Data Databases IoT
Software Design and Architecture
Cloud Architecture Containers Integration Microservices Performance Security
Coding
Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance
Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks

Migrate, Modernize and Build Java Web Apps on Azure: This live workshop will cover methods to enhance Java application development workflow.

Modern Digital Website Security: Prepare to face any form of malicious web activity and enable your sites to optimally serve your customers.

Kubernetes in the Enterprise: The latest expert insights on scaling, serverless, Kubernetes-powered AI, cluster security, FinOps, and more.

A Guide to Continuous Integration and Deployment: Learn the fundamentals and understand the use of CI/CD in your apps.

Related

  • Create Custom DataWeave Functions in Mule 4
  • Migrating MuleSoft System API to AWS Lambda (Part 1)
  • MuleSoft: Do You Have an Extra Mule Under the Hood?
  • Mule 4 Custom Policy Example

Trending

  • Ultimate Guide to Smart Agriculture Systems Using IoT
  • Exploring Apache Airflow for Batch Processing Scenario
  • Querydsl vs. JPA Criteria, Part 5: Maven Integration
  • Extend Your GPTs With C#
  1. DZone
  2. Data Engineering
  3. Databases
  4. Connect to AWS Athena Database in a Mule Application With Generic Database

Connect to AWS Athena Database in a Mule Application With Generic Database

This blog helps understand the steps to configure the Mule application to use generic database configuration to connect to Amazon Athena using the AWS Athena JDBC Driver.

Anupam Chakraborty user avatar by
Anupam Chakraborty
DZone Core CORE ·
Aug. 07, 23 · Tutorial
Like (2)
Save
Tweet
Share
2.2K Views

Join the DZone community and get the full member experience.

Join For Free

This would be a short tutorial on connecting from MuleSoft to AWS Athena Database. We will use Generic Database Driver.

 Please read through the following resources for further information before getting started, just in case. 

  • Introduction to MuleSoft Anypoint Studio
  • Introduction to building API using MuleSoft
  • MuleSoft Database Connector
  • MuleSoft Database Connector: Configuring a generic connection
  • Connect Amazon Athena with JDBC

We will get started and go through each process step by step. Let's assume that we have the following information before getting started:

  • Athena S3 Output Location: <S3OutputLocation>
  • AWS Region: <AwsRegion>
  • UserName: <User>
  • Password: <Password>

Get Started

We will start by creating a Project in Anypoint MuleSoft Platform. If you want to understand how to do this, please check my blog on Introduction to Building API Using MuleSoft. 

new mule project

 

Once we have created the application, the first step is to update our POM with the necessary JAR. I was not able to find a MAVEN Repository having the necessary JAR Files available to be used. However, I was able to get the JAR files.

The JAR files can be available for download here in my GitHub space.

Alternatively, you can download the JAR file from the AWS Documentation Connect Amazon Athena with JDBC.

In my case, I am using version 2.1.0.1000, the JDBC driver with AWS SDK.

Once the corresponding JAR is downloaded, we need to upload the same to the artifactory that we use. In my case, I will simply upload this to my Maven Repository using the following command.

Shell
 
mvn install:install-file \
   -Dfile=<path-to-file> \
   -DgroupId=<group-id> \
   -DartifactId=<artifact-id> \
   -Dversion=<version> \
   -Dpackaging=<packaging> \
   -DgeneratePom=true

 

In my case:

mvn install:install-file   -Dfile=<path-to-file> -DgroupId=aws.athena -DartifactId=AthenaJDBC42 -Dversion=2.1.0.1000 File Upload

I would overwrite the pom file that I have downloaded from the GitLab.

Set Up My Application POM File

Once completed, we must update my POM File at 2 places:

  • Add the dependency to the AthenaJDBC42 JAR.
XML
 
<dependency>
	<groupId>aws.athena</groupId>
    <artifactId>AthenaJDBC42</artifactId>
    <version>2.1.0.1000</version>
</dependency>

 

  • Add the shared library configuration.
XML
 
<plugin>
	<groupId>org.mule.tools.maven</groupId>
    <artifactId>mule-maven-plugin</artifactId>
    <version>${mule.maven.plugin.version}</version>
    <extensions>true</extensions>
    <configuration>
		<sharedLibraries>
			<sharedLibrary>
				<groupId>aws.athena</groupId>
				<artifactId>AthenaJDBC42</artifactId>
			</sharedLibrary>                              
		</sharedLibraries>
		<classifier>mule-application</classifier>
	</configuration>
</plugin>


Starting the Code

Here is an example of the code used. We will head back to the actual XML and start by creating a flow consisting of the following, in order:

  • HTTP Listener
  • Logger
  • Database Select
  • Logger
  • Map to convert the output to JSON
  • The Flow should look something like this.

flow

Here is the code that I have in my XML:

XML
 
<?xml version="1.0"encoding="UTF-8"?>

<mule xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core"xmlns:db="http://www.mulesoft.org/schema/mule/db"
     xmlns:http="http://www.mulesoft.org/schema/mule/http"
     xmlns="http://www.mulesoft.org/schema/mule/core"xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/db http://www.mulesoft.org/schema/mule/db/current/mule-db.xsd
http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd">
     
     <http:listener-config name="HTTP_Listener_config"doc:name="HTTP Listener config">
          <http:listener-connection host="0.0.0.0"port="8081" />
     </http:listener-config>
     
     <db:config name="Athena_Database_Config">
          <db:generic-connection 
               url="jdbc:awsathena://User=${athena.User};Password=${athena.Password};AwsRegion=${athena.AwsRegion};S3OutputLocation=${athena.S3OutputLocation}"
               driverClassName="com.simba.athena.jdbc.Driver"/>
     </db:config>
     
     <flow name="test-athena-dbFlow"doc:id="cc20b26a-4cc0-4a81-b66a-bf97e310858a">
          <http:listener doc:name="Listener"doc:id="d6463d2c-4895-43e7-a5f8-ae4e261cf187"config-ref="HTTP_Listener_config" path="/testAthena"/>
          <logger level="INFO"doc:name="Logger" doc:id="21cb94b1-a3cc-436a-a97b-e362c2ab8989"message="Request Received"/>
          <db:select doc:name="Select"doc:id="6210b6c3-bc8e-4e7d-87f1-dafa888fdf45"config-ref="Athena_Database_Config">
               <db:sql ><![CDATA[${athena.sqlQuery}]]></db:sql>
          </db:select>
          <logger level="INFO"doc:name="Logger" doc:id="c17e9502-e118-4a06-a33f-ccc816fcd7b5"message="Database Connection Complete"/>
          <ee:transform doc:name="Transform Message" doc:id="7de4dceb-e124-41f6-a51a-6718ae2bc6b5">
               <ee:message >
                     <ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
payload]]></ee:set-payload>
               </ee:message>
          </ee:transform>
     </flow>
</mule>

 

Testing My Application

Finally, I will run my application in MuleSoft. 

 run my application in MuleSoft

Once the application is deployed, up and kicking, we can call the API from Postman:

call the API from Postman

Conclusion

This blog explains the steps required to configure the Mule application to use generic database configuration to connect to Amazon Athena using the AWS Athena JDBC Driver. Please let me know your thoughts. The idea was to connect to the database. Of course, we should have proper error handling, HTTPs security, etc., in the application.

AWS Database MULE MuleSoft application

Published at DZone with permission of Anupam Chakraborty. See the original article here.

Opinions expressed by DZone contributors are their own.

Related

  • Create Custom DataWeave Functions in Mule 4
  • Migrating MuleSoft System API to AWS Lambda (Part 1)
  • MuleSoft: Do You Have an Extra Mule Under the Hood?
  • Mule 4 Custom Policy Example

Comments

Partner Resources

X

ABOUT US

  • About DZone
  • Send feedback
  • Careers
  • Sitemap

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Core Program
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 3343 Perimeter Hill Drive
  • Suite 100
  • Nashville, TN 37211
  • support@dzone.com

Let's be friends: