Introducing Athena-Express-Plus: Elevating Your Amazon Athena Experience
Tags: aws, node, opensource, athena
Published: 2023-09-23 07:23:07

Are you ready to supercharge your Amazon Athena experience? Meet [Athena-Express-Plus](https://www.npmjs.com/package/athena-express-plus), the enhanced version of Athena-Express that takes your AWS V3 architecture support to the next level. In this blog post, we'll explore how Athena-Express-Plus seamlessly integrates with the latest AWS services and features, making SQL queries on Amazon Athena a breeze.

**Taking Athena-Express to the Next Level**
Athena-Express-Plus is a fork of the original [Athena-Express] (https://www.npmjs.com/package/athena-express) project. While it retains the core capabilities of Athena-Express, it goes the extra mile by introducing support for parameterized queries. This feature allows you to inject parameters into your SQL queries, enabling dynamic execution—a game-changer for your Athena workflow.

**A Glimpse of Simplicity**
One of Athena-Express-Plus's standout features is its ability to simplify SQL query execution in Amazon Athena. Whether you're building a web application or working on other projects, this tool can streamline your workflow. It not only executes SQL queries but also fetches clean JSON results in the same request, making it a versatile choice for developers.

![Athena-Express-Plus Example](https://image.ibb.co/cWNvFV/carbon-1.png)

**Unveiling Amazon Athena**
Before diving deeper into Athena-Express-Plus, let's take a moment to understand Amazon Athena. Launched at AWS re:Invent 2016, Athena revolutionizes data analysis in Amazon S3 using standard SQL. Powered by Presto, an open-source SQL engine developed by Facebook, Athena is a potent tool for querying massive datasets.

Athena combines Presto's power with AWS's serverless and self-managed capabilities, eliminating the need for complex ETL jobs. This means you can quickly analyze large-scale datasets with the SQL skills you already possess.

**The Athena-Express-Plus Advantage**
So, how does Athena-Express-Plus simplify your Amazon Athena integration? It bundles several essential steps:

1. **Initiating Query Execution**: Athena-Express-Plus kicks off your query execution.
2. **Monitoring Progress**: It keeps an eye on your query until it's done.
3. **Fetching Results**: Once the query finishes, it retrieves the results from Amazon S3.

But Athena-Express-Plus doesn't stop there. It offers additional benefits:

- **Clean JSON Formatting**: Results are neatly formatted into user-friendly JSON arrays.
- **Error Handling**: It handles specific Athena errors like ThrottlingException and NetworkingError gracefully.
- **Cost Tracking**: Get optional statistics, including the cost per query in USD.
- **Flexible Result Retrieval**: Fetch results via Pagination or as a continuous stream.
- **Synchronous and Asynchronous Modes**: Choose the fetching mode that suits your needs.

Without Athena-Express-Plus, you'd have to painstakingly identify the right API methods, piece them together, and manage error handling for each step. Athena-Express-Plus streamlines this integration, freeing you to focus on your core development tasks.

**Real-World Application**
Athena-Express-Plus finds its most common use case in web applications, acting as a backend for integrating Amazon Athena. It's versatile enough to work in various scenarios, from local applications to AWS Lambda functions.

Here's an example using AWS Lambda:

![Athena-Express-Plus Architecture](https://image.ibb.co/k3RpNA/Screen-Shot-2018-11-22-at-11-17-58-AM.png)

In this setup, a web frontend triggers an API endpoint hosted on Amazon API Gateway, passing a query request. The API Gateway then invokes a Lambda function equipped with Athena-Express-Plus. It's a streamlined, efficient way to harness the power of Amazon Athena in your applications.

**Getting Started with Athena-Express-Plus**
Setting up Athena-Express-Plus is straightforward. First, you'll need to configure it, either with simple or advanced settings. Let's look at a basic configuration example:

```
const athena = new Athena({ region: "REGION" });
const s3 = new S3({ region: "REGION" });
const athenaExpressConfig = { athena, s3, s3Bucket: "s3://my-bucket" };
const athenaExpress = new AthenaExpress(athenaExpressConfig);
```

If you require more advanced configurations, such as changing the database, workgroup, or encryption settings, Athena-Express-Plus can accommodate those too. It's all about flexibility and making sure it fits your specific needs.

**Querying with Athena-Express-Plus**
With Athena-Express-Plus configured, you can start querying Amazon Athena effortlessly. Here's a quick example using both object and string notations:

_Using Promises_:

```
let myQuery = {
    sql: "SELECT elb_name, request_port, request_ip FROM elb_logs LIMIT 3",
    db: "sampledb"
};

athenaExpress
    .query(myQuery)
    .then(results => {
        console.log(results);
    })
    .catch(error => {
        console.log(error);
    });
```

_Using Async/Await_:

```
(async () => {
    let myQuery = "SELECT elb_name, request_port, request_ip FROM elb_logs LIMIT 3";

    try {
        let results = await athenaExpress.query(myQuery);
        console.log(results);
    } catch (error) {
        console.log(error);
    }
})();
```


You can also leverage the QueryExecutionId if you have it from a previous execution, which is handy for scenarios like skipping result retrieval or waiting for results asynchronously.

**Support for Parameterized Queries**
Athena-Express-Plus brings another powerful feature to the table—support for parameterized queries. With parameterized queries, you can inject dynamic values into your SQL queries, making it easy to execute similar queries with different parameters.

Here's a glimpse of how to use parameterized queries:

```
let myQuery = {
    sql: "SELECT * FROM cloudfront_logs LIMIT ?",
    db: "mydatabase",
    values: ['2']
};

athenaExpress
    .query(myQuery)
    .then(results => {
        console.log(results);
    })
    .catch(error => {
        console.log(error);
    });
```

In this example, we use placeholders (?) in the SQL query and provide the actual parameter values in the values array.


**Get Started with Athena-Express-Plus**
Athena-Express-Plus opens up new possibilities for simplifying your Amazon Athena interactions. Whether you're a web developer, data analyst, or cloud enthusiast, this enhanced tool can make your life easier when dealing with Amazon Athena. To get started, check out the [Athena-Express-Plus](https://www.npmjs.com/package/athena-express-plus) package and dive into the documentation.