DataSunrise está patrocinando AWS re:Invent 2024 en Las Vegas, por favor visítenos en el stand #2158 de DataSunrise

Controlador JDBC de Athena

Controlador JDBC de Athena

¿Eres un desarrollador de Java que busca conectarse a Amazon Athena desde tus aplicaciones? El controlador JDBC de Athena facilita la consulta de datos en Amazon S3 utilizando SQL estándar.

Este artículo explicará el controlador JDBC de Athena. Mostrará cómo usarlo con código de ejemplo. También hablará sobre las características de seguridad que posee. Al final, tendrás una base sólida para usar Athena con Java.

¿Qué es el controlador JDBC de Athena?

El controlador JDBC de Athena es un controlador de tipo 4. Las aplicaciones Java lo utilizan para conectarse a la fuente de datos de Athena. Esta conexión se realiza mediante la API JDBC. Convierte las llamadas a métodos JDBC en solicitudes HTTP que Athena puede entender.

Utilizar la API JDBC para consultar Athena tiene varias ventajas:

  • Abstrae los detalles de la comunicación HTTP subyacente
  • Permite utilizar código JDBC y SQL familiares para trabajar con Athena
  • Permite integrar Athena en cualquier aplicación o herramienta Java que soporte JDBC

AWS proporciona el controlador como un archivo JAR independiente. Para usarlo, simplemente incluye el JAR en el classpath de tu aplicación.

Conectarse a Athena

Para conectarse a Athena utilizando el controlador JDBC, debes construir una cadena de conexión JDBC con el siguiente formato:

jdbc:awsathena://AwsRegion=[Region];S3OutputLocation=[Output];[Property1]=[Value1];[Property2]=[Value2];...

Los componentes clave son:

  • La región de AWS que hospeda tu instancia de Athena.
  • S3OutputLocation – La ubicación en S3 donde Athena debe almacenar los resultados de las consultas
  • Propiedades adicionales opcionales para la configuración

A continuación se muestra un ejemplo de una URL JDBC que se conecta a Athena en la región us-west-2. El sistema guarda los resultados en un bucket S3 designado:

jdbc:awsathena://AwsRegion=us-west-2;S3OutputLocation=s3://my-athena-results/output;

Para establecer la conexión en el código Java, utiliza la clase DriverManager:

String url = "jdbc:awsathena://AwsRegion=us-west-2;S3OutputLocation=s3://my-athena-results/output";
Connection conn = DriverManager.getConnection(url);

Esto crea un objeto Connection que luego puedes usar para ejecutar consultas.

Autenticación en Athena

Para poder conectarse, el controlador JDBC necesita credenciales de AWS para autenticarse con Athena. Hay varias formas de proporcionar credenciales:

  1. Variables de entorno – Configura las variables de entorno AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY.
  2. Propiedades del sistema Java – Configura las propiedades del sistema aws.accessKeyId y aws.secretKey.
  3. Archivo de credenciales de AWS – Coloca la clave de acceso y el secreto en el archivo ~/.aws/credentials.
  4. Perfil de instancia de AWS – Si se ejecuta en EC2, asigna un rol de IAM a la instancia. El controlador recuperará automáticamente las credenciales temporales.

El controlador JDBC busca credenciales en ese orden. Deberías usar un perfil de instancia o el archivo de credenciales para evitar codificar llaves sensibles.

Consultas Básicas

Una vez que tienes una conexión, puedes ejecutar consultas SQL en ella. Usa el método createStatement para crear un objeto Statement, luego llama a executeQuery con tu SQL:

Statement stmt = conn.createStatement();
String sql = "SELECT * FROM my_table LIMIT 10";
ResultSet rs = stmt.executeQuery(sql);

Esto envía la consulta a Athena, espera a que termine y devuelve los resultados como un ResultSet. Luego puedes iterar sobre las filas y acceder a los valores de las columnas:

while (rs.next()) {
String col1 = rs.getString(1);
int col2 = rs.getInt(2);
// ...
}

Recuerda que las consultas de Athena estructuran los datos almacenados en S3. Antes de consultar, debes crear una tabla externa que se mapee a los datos en S3:

CREATE EXTERNAL TABLE my_table (
col1 STRING,
col2 INT
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LOCATION 's3://my-data-bucket/input/';

Esto crea una tabla my_table con dos columnas respaldadas por un archivo CSV en S3. Con la tabla en su lugar, puedes consultarla vía JDBC como se muestra arriba.

Consultas Parametrizadas

Para consultas que aceptan parámetros, utiliza un PreparedStatement en lugar de un Statement regular. Construye el SQL con marcadores de posición ?, luego vincula valores a ellos:

String sql = "SELECT * FROM my_table WHERE col1 = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "foo");
ResultSet rs = pstmt.executeQuery();

Esto vincula el valor “foo” al primer marcador de posición ?. Usar un PreparedStatement tiene algunos beneficios:

  • Evita la inyección de SQL al enviar parámetros por separado de la consulta.
  • Athena puede almacenar en caché y reutilizar el plan de consulta
  • Puedes ejecutar la misma consulta varias veces con diferentes valores de parámetros

Características de Seguridad

El controlador JDBC de Athena admite varias características y configuraciones relacionadas con la seguridad:

Encriptación

Por defecto, el controlador se conecta a Athena utilizando HTTPS para encriptación en tránsito. Todos los datos enviados entre la aplicación y Athena están encriptados utilizando TLS.

Control de Acceso

Athena respeta los permisos de IAM adjuntos a las credenciales de AWS que utiliza el controlador JDBC. Puedes restringir qué datos puede acceder un usuario otorgando permisos SELECT en bases de datos y tablas específicas.

Por ejemplo, esta política permite consultas en tablas en la base de datos ‘my_database’ solamente:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "athena:StartQueryExecution",
                "athena:GetQueryExecution",
                "athena:GetQueryResults",
                "athena:StopQueryExecution"
            ],
            "Resource": [
"arn:aws:athena:us-west-2:123456789012:workgroup/primary"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "glue:GetTable",
                "glue:GetPartitions",
                "glue:GetPartition"
            ],
            "Resource": [
                "arn:aws:glue:us-west-2:123456789012:catalog",
"arn:aws:glue:us-west-2:123456789012:database/my_database",
"arn:aws:glue:us-west-2:123456789012:table/my_database/*"
            ]
        }
    ]
}

Adjunta esta política al usuario o rol de IAM utilizado por la conexión JDBC para hacer cumplir el control de acceso.

Encriptación en S3

El sistema almacena los resultados de las consultas en la ubicación S3 especificada en la URL JDBC. Para proteger estos datos en reposo, puedes configurar el bucket S3 para usar encriptación.

El controlador JDBC de Athena admite de manera transparente la lectura y escritura en buckets S3 encriptados.

Conclusión

El controlador JDBC de Athena ayuda a las aplicaciones Java a ejecutar consultas SQL en datos en Amazon S3. Admite una variedad de métodos de autenticación y características de seguridad para proteger los datos.

Para obtener más información, consulta la documentación oficial del controlador JDBC de Athena.

Acerca de DataSunrise

Si necesitas características adicionales de seguridad, monitoreo, auditoría y cumplimiento para Athena, considera DataSunrise Database Security. DataSunrise ofrece herramientas para controlar el enmascaramiento de datos, auditar consultas en tiempo real, monitorear y asegurar el cumplimiento de regulaciones.

Para experimentar DataSunrise en vivo y obtener una licencia de prueba gratuita, contacta a nuestro equipo para programar una demostración en línea. Te mostraremos cómo DataSunrise puede mejorar la seguridad de Athena.

Siguiente

Azure Cloud: Configuración de DataSunrise con OpenTOFU

Azure Cloud: Configuración de DataSunrise con OpenTOFU

Más información

¿Necesita la ayuda de nuestro equipo de soporte?

Nuestros expertos estarán encantados de responder a sus preguntas.

Información general:
[email protected]
Servicio al Cliente y Soporte Técnico:
support.datasunrise.com
Consultas sobre Asociaciones y Alianzas:
[email protected]