Ou tapez /data-quality-checker dans une session Claude Code, ou décrivez simplement votre besoin — le skill se déclenche automatiquement via le skill-router.
🔑 Déclencheurs automatiques
Le skill s'active automatiquement quand votre demande contient :
qualité des donnéesdata qualitydonnées manquantesdoublonsvalidation de donnéesanomalie donnéescontrôle qualité data
Profiler : explorer les données pour comprendre la distribution et les patterns.
Définir les règles : complétude, unicité, validité, cohérence, fraîcheur.
Implémenter les checks : requêtes SQL ou framework de validation.
Alerter : notifier quand un seuil de qualité est dépassé.
Dimensions de la qualité
Dimension
Question
Exemple de check
Complétude
Y a-t-il des valeurs manquantes ?
WHERE column IS NULL
Unicité
Y a-t-il des doublons ?
GROUP BY ... HAVING COUNT > 1
Validité
Les valeurs respectent-elles le format ?
Regex, plages de valeurs
Cohérence
Les données sont-elles cohérentes entre tables ?
Jointures orphelines
Fraîcheur
Les données sont-elles à jour ?
MAX(updated_at) vs maintenant
Exactitude
Les données reflètent-elles la réalité ?
Comparaison avec source de vérité
Checks SQL essentiels
Complétude
-- Taux de nullité par colonne
SELECT
'email' AS column_name,
COUNT(*) AS total_rows,
SUM(CASE WHEN email IS NULL THEN 1 ELSE 0 END) AS null_count,
ROUND(100.0 * SUM(CASE WHEN email IS NULL THEN 1 ELSE 0 END) / COUNT(*), 2) AS null_pct
FROM customers
UNION ALL
SELECT 'phone', COUNT(*), SUM(CASE WHEN phone IS NULL THEN 1 ELSE 0 END),
ROUND(100.0 * SUM(CASE WHEN phone IS NULL THEN 1 ELSE 0 END) / COUNT(*), 2)
FROM customers;
Unicité
-- Détecter les doublons
SELECT email, COUNT(*) AS occurrences
FROM customers
WHERE email IS NOT NULL
GROUP BY email
HAVING COUNT(*) > 1
ORDER BY occurrences DESC;
Validité
-- Valeurs hors plage
SELECT * FROM orders
WHERE amount <= 0
OR amount > 1000000
OR order_date > CURRENT_DATE
OR status NOT IN ('pending', 'processing', 'completed', 'cancelled');
Cohérence
-- Orphelins : commandes sans client valide
SELECT o.order_id, o.customer_id
FROM orders o
LEFT JOIN customers c ON o.customer_id = c.id
WHERE c.id IS NULL;
Fraîcheur
-- Données périmées
SELECT
'orders' AS table_name,
MAX(updated_at) AS last_update,
EXTRACT(EPOCH FROM (NOW() - MAX(updated_at))) / 3600 AS hours_since_update
FROM orders
HAVING EXTRACT(EPOCH FROM (NOW() - MAX(updated_at))) / 3600 > 24;
Framework de validation (Python / Great Expectations)