DataSunrise Obtient le Statut Compétence DevOps AWS dans AWS DevSecOps et Surveillance, Journalisation, Performance

Commencer avec le driver JDBC Athena pour des requêtes de données fluides

Commencer avec le driver JDBC Athena pour des requêtes de données fluides

Êtes-vous un développeur Java cherchant à se connecter à Amazon Athena depuis vos applications ? Le driver JDBC Athena facilite l’interrogation des données dans Amazon S3 utilisant le SQL standard.

Cet article explique le driver JDBC Athena. Il montrera comment l’utiliser avec un code d’exemple. Il parlera également des fonctionnalités de sécurité qu’il offre. À la fin, vous aurez une base solide pour utiliser Athena avec Java.

Qu’est-ce que le driver JDBC Athena ?

Le driver JDBC Athena est un driver de type 4. Les applications Java l’utilisent pour se connecter à la source de données Athena. L’API JDBC établit cette connexion. Elle convertit les appels de méthode JDBC en requêtes HTTP qu’Athena peut comprendre.

Utiliser l’API JDBC pour interroger Athena a plusieurs avantages :

  • Il abstrait les détails de la communication HTTP sous-jacente
  • Il permet d’utiliser du code JDBC et SQL familier pour travailler avec Athena
  • Il permet d’intégrer Athena dans toute application ou outil Java supportant JDBC

AWS fournit le driver sous forme d’un fichier JAR indépendant. Pour l’utiliser, il suffit d’inclure le JAR dans le classpath de votre application.

Connexion à Athena

Pour se connecter à Athena avec le driver JDBC, vous devez construire une chaîne de connexion JDBC avec le format suivant :

jdbc:awsathena://AwsRegion=[Région];S3OutputLocation=[EmplacementSortie];[Propriété1]=[Valeur1];[Propriété2]=[Valeur2];...

Les composants clés sont :

  • La région AWS qui héberge votre instance Athena.
  • S3OutputLocation – L’emplacement S3 où Athena doit stocker les résultats des requêtes
  • Propriétés additionnelles optionnelles pour la configuration

Voici un exemple d’URL JDBC qui se connecte à Athena dans la région us-west-2. Le système enregistre les résultats dans un bucket S3 désigné :

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

Pour établir réellement la connexion dans du code Java, utilisez la classe DriverManager :

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

Celui-ci crée un objet Connection que vous pouvez utiliser pour exécuter des requêtes.

Authentification Athena

Pour se connecter, le driver JDBC nécessite des identifiants AWS pour s’authentifier auprès d’Athena. Il y a plusieurs façons de fournir les identifiants :

  1. Variables d’environnement – Définissez les variables d’environnement AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEY.
  2. Propriétés système Java – Définissez les propriétés système aws.accessKeyId et aws.secretKey.
  3. Fichier d’identifiants AWS – Mettez la clé d’accès et le secret dans le fichier ~/.aws/credentials.
  4. Profil d’instance AWS – Si vous utilisez EC2, attribuez un rôle IAM à l’instance. Le driver récupérera automatiquement des identifiants temporaires.

Le driver JDBC cherche les identifiants dans cet ordre. Vous devriez utiliser un profil d’instance ou le fichier d’identifiants pour éviter de coder en dur des clés sensibles.

Requêtes de base

Une fois que vous avez une connexion, vous pouvez exécuter des requêtes SQL dessus. Utilisez la méthode createStatement pour créer un objet Statement, puis appelez executeQuery avec votre SQL :

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

Cela envoie la requête à Athena, attend qu’elle se termine, et renvoie les résultats sous forme de ResultSet. Vous pouvez ensuite itérer sur les lignes et accéder aux valeurs des colonnes :

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

Rappelez-vous qu’Athena interroge des données stockées dans S3. Avant de les interroger, vous devez créer une table externe qui mappe les données S3 :

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

Cela crée une table my_table avec deux colonnes basées sur un fichier CSV dans S3. Avec la table en place, vous pouvez la requêter via JDBC comme montré ci-dessus.

Requêtes paramétrées

Pour les requêtes qui acceptent des paramètres, utilisez un PreparedStatement au lieu d’un Statement régulier. Construisez le SQL avec des placeholders ?, puis liez des valeurs à ceux-ci :

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

Cela lie la valeur “foo” au premier placeholder ?. Utiliser un PreparedStatement a quelques avantages :

  • Il évite les injections SQL en envoyant les paramètres séparément de la requête.
  • Athena peut mettre en cache et réutiliser le plan de requête
  • Vous pouvez exécuter la même requête plusieurs fois avec différentes valeurs de paramètre

Fonctionnalités de sécurité

Le driver JDBC Athena supporte plusieurs fonctionnalités et configurations de sécurité :

Chiffrement

Par défaut, le driver se connecte à Athena en utilisant HTTPS pour le chiffrement en transit. Toutes les données envoyées entre l’application et Athena sont chiffrées en utilisant TLS.

Contrôle d’accès

Athena respecte les permissions IAM attachées aux identifiants AWS utilisés par le driver JDBC. Vous pouvez restreindre les données qu’un utilisateur peut accéder en accordant des permissions SELECT sur des bases de données et tables spécifiques.

Par exemple, cette politique permet de requêter des tables dans la base de données “my_database” uniquement :

{
    "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/*"
            ]
        }
    ]
}

Attachez cette politique à l’utilisateur IAM ou au rôle utilisé par la connexion JDBC pour appliquer le contrôle d’accès.

Chiffrement S3

Le système stocke les résultats des requêtes dans l’emplacement S3 spécifié dans l’URL JDBC. Pour protéger ces données au repos, vous pouvez configurer le bucket S3 pour utiliser le chiffrement.

Le driver JDBC Athena supporte de manière transparente la lecture et l’écriture dans les buckets S3 chiffrés.

Conclusion

Le driver JDBC Athena aide les applications Java à exécuter des requêtes SQL sur des données dans Amazon S3. Il supporte une variété de méthodes d’authentification et de fonctionnalités de sécurité pour protéger les données.

Pour en savoir plus, consultez la documentation officielle du driver JDBC Athena.

À propos de DataSunrise

Si vous avez besoin de fonctionnalités supplémentaires de sécurité, surveillance, audit et conformité pour Athena, pensez à DataSunrise Database Security. DataSunrise offre des outils pour contrôler le masquage de données, auditer les requêtes en temps réel, surveiller et garantir la conformité aux réglementations.

Pour découvrir DataSunrise en direct et obtenir une licence d’essai gratuite, contactez notre équipe pour planifier une démonstration en ligne. Nous vous montrerons comment DataSunrise peut améliorer la sécurité d’Athena.

Suivant

Configuration de DataSunrise sur Azure Cloud avec OpenTOFU : Un guide étape par étape

Configuration de DataSunrise sur Azure Cloud avec OpenTOFU : Un guide étape par étape

En savoir plus

Besoin de l'aide de notre équipe de support ?

Nos experts seront ravis de répondre à vos questions.

Informations générales :
[email protected]
Service clientèle et support technique :
support.datasunrise.com
Demandes de partenariat et d'alliance :
[email protected]