Profil de données
Générez un profil complet d'une table que les nouveaux membres de l'équipe pourraient utiliser pour comprendre les données.
Step 1: Métadonnées de base
Requête des métadonnées de colonne :
SELECT COLUMN_NAME, DATA_TYPE, COMMENT
FROM <database>.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = '<schema>' AND TABLE_NAME = '<table>'
ORDER BY ORDINAL_POSITION
Si le nom de la table n'est pas complètement qualifié, recherchez d'abord dans INFORMATION_SCHEMA.TABLES pour le localiser.
Step 2: Taille et forme
Exécutez via run_sql :
SELECT
COUNT(*) as total_rows,
COUNT(*) / 1000000.0 as millions_of_rows
FROM <table>
Step 3: Statistiques au niveau des colonnes
Pour chaque colonne, collectez les statistiques appropriées en fonction du type de données :
Colonnes numériques
SELECT
MIN(column_name) as min_val,
MAX(column_name) as max_val,
AVG(column_name) as avg_val,
STDDEV(column_name) as std_dev,
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY column_name) as median,
SUM(CASE WHEN column_name IS NULL THEN 1 ELSE 0 END) as null_count,
COUNT(DISTINCT column_name) as distinct_count
FROM <table>
Colonnes de texte
SELECT
MIN(LEN(column_name)) as min_length,
MAX(LEN(column_name)) as max_length,
AVG(LEN(column_name)) as avg_length,
SUM(CASE WHEN column_name IS NULL OR column_name = '' THEN 1 ELSE 0 END) as empty_count,
COUNT(DISTINCT column_name) as distinct_count
FROM <table>
Colonnes de date/timestamp
SELECT
MIN(column_name) as earliest,
MAX(column_name) as latest,
DATEDIFF('day', MIN(column_name), MAX(column_name)) as date_range_days,
SUM(CASE WHEN column_name IS NULL THEN 1 ELSE 0 END) as null_count
FROM <table>
Step 4: Analyse de cardinalité
Pour les colonnes qui ressemblent à des clés catégoriques/dimensionnelles :
SELECT
column_name,
COUNT(*) as frequency,
ROUND(COUNT(*) * 100.0 / SUM(COUNT(*)) OVER(), 2) as percentage
FROM <table>
GROUP BY column_name
ORDER BY frequency DESC
LIMIT 20
Cela révèle :
- Les colonnes de haute cardinalité (probablement des IDs ou valeurs uniques)
- Les colonnes de basse cardinalité (probablement des catégories ou champs de statut)
- Les distributions asymétriques (une valeur domine)
Step 5: Données d'exemple
Obtenez des lignes représentatives :
SELECT *
FROM <table>
LIMIT 10
Si la table est volumineuse et vous voulez de la variété, échantillonnez à partir de différentes périodes ou catégories.
Step 6: Évaluation de la qualité des données
Résumez la qualité selon ces dimensions :
Complétude
- Quelles colonnes contiennent des NULLs ? Quel pourcentage ?
- Les NULLs sont-ils attendus ou problématiques ?
Unicité
- La clé primaire apparente contient-elle des doublons ?
- Y a-t-il des lignes en doublon inattendu ?
Fraîcheur
- Quand les données ont-elles été mises à jour pour la dernière fois ? (MAX des colonnes timestamp)
- La fréquence de mise à jour est-elle comme prévu ?
Validité
- Y a-t-il des valeurs en dehors des plages attendues ?
- Y a-t-il des formats invalides (dates, emails, etc.) ?
- Y a-t-il des clés étrangères orphelines ?
Cohérence
- Les colonnes associées ont-elles du sens ensemble ?
- Y a-t-il des contradictions logiques ?
Step 7: Résumé de sortie
Fournissez un profil structuré :
Présentation générale
2-3 phrases décrivant ce que contient cette table, qui l'utilise et à quel point elle est à jour.
Schéma
| Colonne | Type | Nulls% | Distincts | Description |
|---|---|---|---|---|
| ... | ... | ... | ... | ... |
Statistiques clés
- Nombre de lignes : X
- Plage de dates : Y à Z
- Dernière mise à jour : timestamp
Score de qualité des données
- Complétude : X/10
- Unicité : X/10
- Fraîcheur : X/10
- Général : X/10
Problèmes potentiels
Listez tous les problèmes de qualité des données découverts.
Requêtes recommandées
3-5 requêtes utiles pour les questions courantes sur ces données.