profiling-tables

Profilage approfondi des données pour une table spécifique. À utiliser lorsque l'utilisateur demande à profiler une table, souhaite obtenir des statistiques sur un jeu de données, s'interroge sur la qualité des données, ou a besoin de comprendre la structure et le contenu d'une table. Nécessite un nom de table.

npx skills add https://github.com/astronomer/agents --skill profiling-tables

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.

Skills similaires