Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.
Quelldateien prüfen
Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.
Mit Codex oder Claude installieren Kopieren Sie diesen Prompt, fügen Sie ihn in Codex, Claude oder einen anderen Assistant ein und lassen Sie die Skill-Seite prüfen und installieren.
Ein direkter Befehl überspringt den Prüf-Prompt. Prüfen Sie die Quelle, bevor Sie ihn ausführen.
Avantages :
- Données nettoyées avant chargement → base cible légère
- Moins de compute sur la cible
- Idéal pour sources sensibles / PII à anonymiser
Inconvénients :
- Transform engine doit scaler (Spark)
- Perte de granularité si la cible ne stocke pas le raw
- Plus lent à l'ingestion
2.2 ELT (Extract → Load → Transform)
Avantages :
- Ingestion rapide (copie raw)
- Transform engine = la cible (Snowflake, BigQuery, Redshift)
- Toute la flexibilité des transformations post-hoc
- Data scientists accèdent aux données brutes
Inconvénients :
- Compute coûteux sur la cible
- Nécessite un warehouse scalable
- Données raw = stockage volumineux
2.3 Table de Décision
Critère
ETL
ELT
Volume de données
Moyen (< 10 To)
Très grand (> 10 To)
Cible
Base traditionnelle
Data Warehouse Cloud
Latence requise
Modérée
Faible à modérée
Data Science raw
Non
Oui
Anonymisation
Avant chargement
Possible après
Coût compute
Fixe (cluster Spark)
Variable (warehouse)
3. Data Contracts
3.1 Définition d'un Data Contract
Un data contract est un accord formel entre un producteur et un consommateur de données, spécifiant :
Schema : nom des colonnes, types, contraintes.
Freshness : à quelle fréquence les données sont mises à jour.
Volume : nombre de lignes/événements attendus.
SLA : temps d'engagement pour la livraison.
Qualité : règles de validation (null ratio, range, uniqueness).
import yaml
import pandas as pd
defvalidate_data_contract(df: pd.DataFrame, contract_path: str) -> dict:
withopen(contract_path) as f:
contract = yaml.safe_load(f)
results = {"passed": True, "checks": []}
# Validation schemafor field, spec in contract['schema']['fields'].items():
if spec['required'] and field notin df.columns:
results['checks'].append(f"MISSING: {field}")
results['passed'] = False# Validation contraintesfor field, spec in contract['schema']['fields'].items():
if'constraints'in spec and field in df.columns:
if'min'in spec['constraints']:
if df[field].min() < spec['constraints']['min']:
results['checks'].append(f"MIN_FAIL: {field}")
results['passed'] = Falsereturn results
4. Data Lineage (OpenLineage)
4.1 Intégration OpenLineage
from openlineage.client import OpenLineageClient
from openlineage.client.run import RunEvent, RunState, Run
from openlineage.client.event import Dataset, Job, ParentRun
from datetime import datetime
client = OpenLineageClient(url="http://marquez:5000")
defemit_lineage(job_name: str, inputs: list, outputs: list):
"""Émet un événement de lineage"""
event = RunEvent(
eventType=RunState.COMPLETE,
eventTime=datetime.utcnow().isoformat(),
run=Run(runId=job_name),
job=Job(namespace="eva-pipelines", name=job_name),
inputs=[Dataset(namespace="s3", name=p) for p in inputs],
outputs=[Dataset(namespace="s3", name=p) for p in outputs],
producer="eva-data-pipeline"
)
client.emit(event)
# Usage
emit_lineage(
"bronze_to_silver",
inputs=["s3://data-lake/bronze/sensors/date=2026-07-22/"],
outputs=["s3://data-lake/silver/sensors/date=2026-07-22/"]
)