> ## Content Index
> Fetch the complete content index at: https://www.idriss-benbassou.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# Glue Data Catalog et crawler : rendre son data lake S3 requêtable
- URL: https://www.idriss-benbassou.com/glue-data-catalog-crawler-data-lake-s3/
- Published: 2026-08-18T07:35:31.000Z
- Updated: 2026-08-18T07:35:30.000Z
- Author: Idriss BENBASSOU
- Tags: AWS, #rating-2

On a structuré [le lake en zones](https://www.idriss-benbassou.com/data-lake-s3-zones-raw-clean-curated-versioning-lifecycle/). Mais pour AWS, `commandes.csv` reste un fichier d'octets. Impossible de le requêter en SQL tant que personne n'a décrit ce qu'il contient, quelles colonnes, quels types, quel format. C'est le rôle du Glue Data Catalog.

## Le Data Catalog, l'annuaire du lake

Le catalogue ne contient aucune donnée. Il contient des métadonnées, donc pour chaque table l'emplacement S3, le format du fichier, la liste des colonnes et leurs types. Comme un annuaire, rien de plus.

Sa force, c'est qu'il est partagé. On décrit une table une fois, et tous les services la voient, Athena pour requêter, Glue ETL pour transformer, Redshift Spectrum pour lire le lake depuis l'entrepôt, Lake Formation pour poser des droits. C'est la pièce centrale de l'architecture vue dans [l'article d'overview](https://www.idriss-benbassou.com/aws-pour-la-data-services-architecture/).

Et pour remplir cet annuaire, deux options. À la main avec des ordres SQL (on le fera dans Athena), ou automatiquement avec un crawler, un robot qui parcourt un préfixe S3, lit un échantillon des fichiers, devine le schéma et crée les tables. On fait les deux dans la série, le crawler aujourd'hui.

## Créer la database

Une database Glue, c'est juste un dossier logique pour ranger des tables. On en crée une pour la zone raw.

![](https://storage.ghost.io/c/60/f1/60f18be4-df79-4956-8e4a-c2fa80212e93/content/images/2026/08/image-15.png)

1. Dans la console, ouvre le service **AWS Glue**.
2. Menu de gauche, section "Data Catalog", clique sur **"Databases"** puis **"Add database"**.
3. Nomme-la `ecommerce_raw` et valide.

![](https://storage.ghost.io/c/60/f1/60f18be4-df79-4956-8e4a-c2fa80212e93/content/images/2026/08/image-17.png)

Data Catalog - ****AWS Glue**

💡

Il est conseillé d'avoir une database par zone du lake. On aura `ecommerce_clean` et `ecommerce_curated` plus tard, le nom de la database dit immédiatement le niveau de fiabilité de la donnée.

## Créer le crawler

1. Menu de gauche, clique sur **"Crawlers"** puis **"Create crawler"**, nomme-le `crawler-raw-ecommerce`.
2. Étape des sources, clique sur **"Add a data source"**, garde S3 et renseigne le chemin `s3://ibdata-datalake-formation/raw/`. Le crawler va parcourir tout ce qui est en dessous.

![](https://storage.ghost.io/c/60/f1/60f18be4-df79-4956-8e4a-c2fa80212e93/content/images/2026/08/image-19.png)

1. Étape du rôle IAM, choisis **"Create new IAM role"** et nomme-le `AWSGlueServiceRole-formation`.

![](https://storage.ghost.io/c/60/f1/60f18be4-df79-4956-8e4a-c2fa80212e93/content/images/2026/08/image-20.png)

Nb : Concernant le rôle de service IAM. Le crawler est un programme qui tourne chez AWS et pas sur ton poste, donc il n'utilise pas tes access keys.. Il faut donc un rôle IAM qui l'autorise à lire le bucket et à écrire dans le catalogue. Chaque service AWS qui agit pour toi fonctionne comme ça, on le reverra avec Glue ETL, Lambda et Redshift, et on y consacrera le module sécurité.

1. Étape de la cible, choisis la database `ecommerce_raw`, et laisse la fréquence sur **"On demand"**.
2. Valide, sélectionne le crawler et clique sur **"Run** **crawler"**.

Une à deux minutes plus tard, le statut passe à Completed.

![](https://storage.ghost.io/c/60/f1/60f18be4-df79-4956-8e4a-c2fa80212e93/content/images/2026/08/image-24.png)

## Lire ce que le crawler a créé

Retour dans "Tables", la database `ecommerce_raw` contient `commandes`, `clients`, `produits` et `evenements_web`. Le crawler a bien compris qu'un préfixe sous `raw/` égale une source égale une table. C'est la structure posée dans l'article précédent qui paye.

![](https://storage.ghost.io/c/60/f1/60f18be4-df79-4956-8e4a-c2fa80212e93/content/images/2026/08/image-25.png)

Ouvre la table `commandes` et regarde le schéma détecté.

![](https://storage.ghost.io/c/60/f1/60f18be4-df79-4956-8e4a-c2fa80212e93/content/images/2026/08/image-26.png)

Trois choses à voir, dont deux pièges classiques.

Les types numériques sont bons. `quantite` en bigint, `montant` en double. Le crawler a échantillonné les fichiers et deviné juste, même avec nos montants vides (ils deviendront des NULL à la lecture).

**`date_commande`** est en string. Et ce n'est pas un bug, le crawler ne type jamais les dates dans un CSV, il n'a aucun moyen sûr de distinguer une date d'un texte. C'est le piège classique, car on va le découvrir à sa première requête Athena quand les comparaisons de dates ne filtrent rien. La règle, on ne force pas le type à la main dans le catalogue pour un CSV (le fichier ne saura pas le fournir), on castera dans Athena et on réglera le problème définitivement au passage en Parquet dans la zone clean.

![](https://storage.ghost.io/c/60/f1/60f18be4-df79-4956-8e4a-c2fa80212e93/content/images/2026/08/image-27.png)

Une colonne `partition_0` est apparue. C'est notre dossier daté `2026-08-16`. Le crawler a compris que ce niveau de l'arborescence est une partition, mais comme le dossier ne suit pas le format `cle=valeur`, il ne peut pas lui donner de nom et l'appelle `partition_0`. Retiens l'info, dans le module partitionnement on nommera nos dossiers `date_export=2026-08-16` et cette colonne prendra un vrai nom toute seule.

💡

Un crawler devine, il ne décide pas. Toujours relire le schéma détecté avant de bâtir dessus, les dates en string et les partitions anonymes etc...

Quand un nouveau dossier daté arrivera dans raw/, les tables ne le verront pas automatiquement, il faut relancer le crawler (ou planifier sa fréquence, ou déclarer la partition dans Athena). On automatisera ça proprement avec Step Functions dans le module orchestration.

## Ce que ça coûte

Le catalogue est gratuit jusqu'à 1 million d'objets stockés, on en est loin. Le crawler, lui, est facturé à la durée, environ 0,15 $ par exécution au minimum (2 DPU, facturation minimale de 10 minutes). C'est le premier service payant de la série, et c'est aussi pour ça qu'on le laisse en "On demand" au lieu de le faire tourner toutes les heures pour rien.

## La checklist finale

- \[ \] Database ecommerce\_raw créée.
- \[ \] Crawler crawler-raw-ecommerce créé avec son rôle IAM, pointé sur raw/.
- \[ \] Run terminé, 4 tables dans le catalogue.
- \[ \] Schéma de commandes relu, dates en string et partition\_0 repérées.

### 

## La suite ?

Dans le prochain article, on ouvre Athena et on requête tout ça en SQL et on ajoute le réglage nécessaire.

## Aller plus loin

Tu prépares la certification AWS Certified Data Engineer Associate (DEA-C01) ? Le Data Catalog, les crawlers et les rôles de service sont au cœur du domaine ingestion et transformation. Pour t'entraîner, j'ai créé des questions d'examen blanc en français.

👉 [S'entraîner sur DataCertification.fr](https://datacertification.fr/certifications?ref=idriss-benbassou.com)

Tu veux que je t'accompagne sur ton projet data (AWS, Snowflake, dbt, modélisation, coûts) ?

👉 [Réserver un appel de 30 minutes](https://calendly.com/idriss-benbassou-datavio/30min?ref=idriss-benbassou.com)

## Questions fréquentes

#### C'est quoi le Glue Data Catalog ?

Un annuaire de métadonnées partagé par les services AWS. Pour chaque table, il stocke l'emplacement S3, le format et le schéma. Athena, Glue ETL, Redshift Spectrum et Lake Formation s'appuient tous dessus, la donnée reste dans S3.

#### C'est quoi un crawler Glue ?

Un robot qui parcourt un préfixe S3, échantillonne les fichiers, devine le format et le schéma, et crée ou met à jour les tables du catalogue. Il se lance à la demande ou sur planification.

#### Pourquoi le crawler met les dates en string ?

Parce que dans un CSV, rien ne distingue de façon sûre une date d'un texte. Le crawler type en string tout ce qui est ambigu. On caste dans les requêtes Athena, et on règle le problème définitivement en convertissant la donnée en Parquet, qui embarque les types.

#### C'est quoi la colonne partition\_0 créée par le crawler ?

Un niveau de dossier que le crawler a détecté comme partition mais qui ne suit pas le format cle=valeur, donc il ne peut pas le nommer. En nommant les dossiers date\_export=2026-08-16, la colonne prend automatiquement le nom date\_export.

#### Combien coûte un crawler Glue ?

Environ 0,44 $ par DPU-heure avec un minimum de 10 minutes facturées, soit environ 0,15 $ par exécution pour un petit crawler à 2 DPU. Le stockage du catalogue est gratuit jusqu'à 1 million d'objets.

#### Faut-il relancer le crawler quand de nouveaux fichiers arrivent ?

Oui si de nouveaux préfixes (nouvelles partitions) apparaissent, sinon les tables ne les voient pas. On peut planifier le crawler, déclarer les partitions dans Athena, ou orchestrer le tout avec Step Functions.

###