On a précédemment structurer le lake et alimenter le data catalogue. Il est maintenant temps de requêter. Avec Athena, le principe est assez simple. On écrit du SQL directement sur les fichiers stockés dans S3 et sans données à charger ailleurs. Athena lit les fichiers, renvoie le résultat et facture selon le volume de données scannées.
Dans cet article, on va lancer les premiers SELECT sur nos tables, on règle le problème des dates en string annoncé dans l'article précédent, et on attaque après le cleaning du dataset.
Le réglage bloquant, le bucket de résultats
Athena écrit le résultat de chaque requête dans S3, et tant qu'on ne lui a pas dit où, on ne peut exécuter de requête.
On lui donne un préfixe dédié dans notre bucket, hors des zones du lake.
- Ouvre le service Athena et l'éditeur de requêtes.
- Clique sur l'onglet "Query Settings" ou sur le bouton "Edit Settings"

- Clique sur "Manage".
=> Renseigne s3://ibdata-datalake-formation/athena-results/ et sauvegarde.

Premier SELECT
Dans l'éditeur, vérifie en haut à gauche que la database est ecommerce_raw, les 4 tables du crawler apparaissent. On commence simple.
SELECT * FROM commandes LIMIT 10;

Prends le temps de regarder deux informations sous le résultat, le temps d'exécution et surtout la donnée scannée (Data scanned) car c'est le chiffre le plus important de l'écran, c'est lui qu'on paye, 5 $ par To scanné. Ici environ 47KB, autant dire rien, mais le réflexe de le lire à chaque requête est important sur de vrais volumes.
Petit test au passage, lance la même requête en ne sélectionnant qu'une colonne.
SELECT commande_id FROM commandes LIMIT 10;
La donnée scannée n'a pas vraiment bougé. Normal, car un CSV se lit ligne entière et donc demander une colonne ou toutes revient au même. Retiens ce comportement, c'est exactement ce que Parquet corrigera dans le prochain article.
Régler le problème des dates
Le crawler a typé date_commande en string. Tant qu'on compare des chaînes ISO, ça passe par chance (l'ordre alphabétique suit l'ordre chronologique), mais dès qu'on veut faire un vrai calcul de dates, ça casse.
-- Erreur : month() ne fonctionne pas sur une string
SELECT month(date_commande) FROM commandes LIMIT 5;
La solution, caster à la lecture.
-- Le chiffre d'affaires par mois
SELECT
date_trunc('month', CAST(date_commande AS date)) AS mois,
ROUND(SUM(montant), 2) AS ca
FROM commandes
WHERE statut != 'annulee'
GROUP BY 1
ORDER BY 1;

Le CAST fonctionne parce que nos dates sont au format ISO (2026-08-16). Cela reste acceptable en zone raw, mais la vraie correction arrive au passage en Parquet, où les types seront embarqués dans le fichier une fois pour toutes.
Cleaning des données
Le dataset embarque des défauts volontaires.
Les doublons d'abord.
SELECT commande_id, COUNT(*) AS nb
FROM commandes
GROUP BY commande_id
HAVING COUNT(*) > 1
ORDER BY commande_id;
C'est le type d'erreur qu'on peut avoir si un export qui a tourné deux fois, un incident d'intégration, les causes varient mais le symptôme est toujours le même. On les éliminera proprement au chargement de la zone clean avec Glue.

Les montants vides ensuite.
SELECT COUNT(*) AS montants_manquants
FROM commandes
WHERE montant IS NULL;
5 lignes. Nos montants vides dans le CSV sont devenus des NULL à la lecture, comme annoncé dans l'article crawler. Toute somme les ignore silencieusement, ce qui fausse un chiffre d'affaires sans jamais lever d'erreur. C'est pour ça qu'un audit de NULL sur les colonnes de mesure est le premier réflexe sur une source inconnue.
Ce que ça coûte
5 $ par To scanné, avec un minimum de 10 Mo facturés par requête. Nos requêtes du jour scannent quelques dizaines de Ko chacune, donc facturées 10 Mo, soit 0,00005 $ la requête. Toute la session tient dans un dixième de centime. La facture Athena ne devient un sujet qu'avec les volumes, et c'est justement l'objet du prochain article.
La checklist finale
- [ ] Query result location configurée sur athena-results/, avec sa lifecycle rule de purge à 7 jours.
- [ ] Premier SELECT passé, le réflexe donnée scannée est pris.
- [ ] Le CA par mois calculé avec le CAST des dates.
- [ ] Les défauts trouvés, 15 doublons et 5 montants NULL.
Combien ça coûte ?
Moins d'un centime pour toute la session, au minimum de facturation de 10 Mo par requête.
La suite ?
On sait requêter, on sait ce qu'on paye. Dans le prochain article, on convertit le dataset en Parquet et on compare, même requête, même donnée, deux formats, et la donnée scannée qui s'effondre à l'écran. C'est l'article qui fait baisser les factures.
Aller plus loin
Le programme complet du parcours est sur la page de la formation AWS.
Tu prépares la certification AWS Certified Data Engineer Associate (DEA-C01) ? Athena, sa tarification au scan et ses réglages sont un incontournable de l'examen. Pour t'entraîner, j'ai créé des questions d'examen blanc en français.
👉 S'entraîner sur DataCertification.fr
Tu veux que je t'accompagne sur ton projet data (AWS, Snowflake, dbt, modélisation, coûts) ?
👉 Réserver un appel de 30 minutes
Questions fréquentes
C'est quoi Amazon Athena ?
Un service de requêtage SQL serverless qui lit directement les fichiers S3 décrits dans Glue Data Catalog. Aucun serveur à gérer, aucune donnée à charger, la facturation se fait à la donnée scannée.
Pourquoi Athena demande un bucket de résultats ?
Athena écrit le résultat de chaque requête dans S3 avant de l'afficher. Sans emplacement configuré, aucune requête ne peut s'exécuter. C'est le premier réglage à faire, et il mérite une lifecycle rule de purge pour éviter l'accumulation.
Combien coûte une requête Athena ?
5 $ par To de donnée scannée, avec un minimum de 10 Mo facturés par requête. Le levier de coût, c'est de réduire le scan, avec les formats colonnes comme Parquet et le partitionnement.
Comment gérer des dates stockées en string dans Athena ?
En castant à la lecture, CAST(colonne AS date) pour un format ISO, ou date_parse pour les autres formats. La correction durable consiste à convertir la donnée en Parquet, qui embarque les vrais types.
Quel moteur SQL utilise Athena ?
Trino (anciennement Presto). Les fonctions disponibles, les fonctions de dates, les regex et les fonctions fenêtres sont celles de Trino, dont la documentation sert de référence.
Pourquoi sélectionner une seule colonne ne réduit pas la donnée scannée ?
Parce qu'un CSV se lit ligne entière, quel que soit le nombre de colonnes demandées. Seuls les formats colonnes comme Parquet permettent de ne lire que les colonnes utilisées, et donc de payer moins.

