DataSunrise Logra el Estado de Competencia en AWS DevOps en AWS DevSecOps y Monitoreo, Registro, Rendimiento

Comenzando con el Controlador JDBC de Athena para Consultas de Datos Sin Problemas

Comenzando con el Controlador JDBC de Athena para Consultas de Datos Sin Problemas

¿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 tiene. 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. La API JDBC hace esta conexión. Convierte las llamadas a métodos JDBC en solicitudes HTTP que Athena puede entender.

Usar la API JDBC para consultar Athena tiene varias ventajas:

  • Abstrae los detalles de la comunicación HTTP subyacente
  • Permite usar código JDBC y SQL conocidos 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.

Conectándose a Athena

Para conectarse a Athena usando el controlador JDBC, necesitas 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 donde se encuentra tu instancia de Athena.
  • S3OutputLocation – La ubicación de S3 donde Athena debe almacenar los resultados de las consultas
  • Propiedades opcionales adicionales para la configuración

Aquí hay 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 realmente la conexión en código Java, usa 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 de Athena

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

  1. Variables de entorno – Establece las variables de entorno AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY.
  2. Propiedades del sistema de Java – Establece 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 obtendrá automáticamente credenciales temporales.

El controlador JDBC busca credenciales en ese orden. Debes usar un perfil de instancia o el archivo de credenciales para evitar codificar claves 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 utilizan datos almacenados en S3. Antes de consultar, necesitas crear una tabla externa que mapee el dato de 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 a través de JDBC como se muestra arriba.

Consultas Parametrizadas

Para consultas que aceptan parámetros, usa un PreparedStatement en lugar de un Statement regular. Construye el SQL con marcadores de posición ? , luego asigna 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 asigna el valor “foo” al primer marcador de posición ?. Usar un PreparedStatement tiene algunos beneficios:

  • Evita la inyección SQL enviando 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 soporta varias características y configuraciones relacionadas con la seguridad:

Encriptación

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

Control de Acceso

Athena respeta los permisos de IAM adjuntos a las credenciales de AWS utilizadas por 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 consultar 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 aplicar el control de acceso.

Encriptación de S3

El sistema almacena los resultados de las consultas en la ubicación de 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 soporta 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 sobre datos en Amazon S3. Soporta una variedad de métodos de autenticación y características de seguridad para proteger los datos.

Para aprender más, 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 demo en línea. Te mostraremos cómo DataSunrise puede mejorar la seguridad de Athena.

Siguiente

Configuración de DataSunrise en Azure Cloud con OpenTOFU: Una Guía Paso a Paso

Configuración de DataSunrise en Azure Cloud con OpenTOFU: Una Guía Paso a Paso

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]