Évaluation paresseuse
Exemple : évaluation paresseuse vs évaluation immédiate
Avantages de l’évaluation paresseuse
- Optimisation des requêtes : plusieurs opérations sont compilées en une seule requête SQL optimisée
- Pushdown des filtres : les filtres sont appliqués au niveau de la source de données
- Élagage des colonnes : seules les colonnes nécessaires sont lues
- Choix différé : le moteur d’exécution peut être choisi à l’exécution
- Inspection du plan : vous pouvez afficher et déboguer la requête avant de l’exécuter
Déclencheurs d’exécution
Déclencheurs automatiques
| Déclencheur | Exemple | Description |
|---|---|---|
print() / repr() | print(ds) | Afficher les résultats |
len() | len(ds) | Obtenir le nombre de lignes |
.columns | ds.columns | Obtenir les noms des colonnes |
.dtypes | ds.dtypes | Obtenir les types de colonnes |
.shape | ds.shape | Obtenir les dimensions |
.index | ds.index | Obtenir l’index des lignes |
.values | ds.values | Obtenir le tableau NumPy |
| Itération | for row in ds | Itérer sur les lignes |
to_df() | ds.to_df() | Convertir en DataFrame pandas |
to_pandas() | ds.to_pandas() | Alias de to_df |
to_dict() | ds.to_dict() | Convertir en dictionnaire |
to_numpy() | ds.to_numpy() | Convertir en tableau |
.equals() | ds.equals(other) | Comparer des DataStore |
Opérations qui restent paresseuses
| Opération | Renvoie | Description |
|---|---|---|
filter() | DataStore | Ajoute la clause WHERE |
select() | DataStore | Ajoute une sélection de colonnes |
sort() | DataStore | Ajoute ORDER BY |
groupby() | LazyGroupBy | Prépare GROUP BY |
join() | DataStore | Ajoute JOIN |
ds['col'] | ColumnExpr | Référence de colonne |
ds[['col1', 'col2']] | DataStore | Sélection de colonnes |
Exécution en trois phases
Phase 1 : Construction de la requête SQL (paresseuse)
Phase 2 : point d’exécution
Phase 3 : Opérations sur les DataFrame (le cas échéant)
Affichage des plans d’exécution
explain() pour voir ce qui sera exécuté :
Query
Response
verbose=True pour obtenir plus de détails :
Mise en cache
Comment fonctionne la mise en cache
Invalidation du cache
Gestion manuelle du cache
Combiner SQL et les opérations Pandas
Opérations compatibles avec SQL
filter(),where()select()groupby(),agg()sort(),orderby()limit(),offset()join(),union()distinct()- Opérations sur les colonnes (mathématiques, comparaisons, méthodes sur les chaînes)
Opérations propres à Pandas
apply()avec des fonctions personnaliséespivot_table()avec des agrégations complexesstack(),unstack()- Opérations sur des DataFrames déjà exécutés
Pipelines hybrides
Sélection du moteur d’exécution
Auto Mode (par défaut)
Forcer le moteur chDB
Forcer le moteur pandas
Impact sur les performances
Bien : filtrer tôt
À éviter : filtrer trop tard
Bon réflexe : sélectionnez les colonnes dès le début
Bon : laissez SQL faire le travail
Résumé des bonnes pratiques
- Chaînez les opérations avant d’exécuter - Construisez la requête complète, puis déclenchez l’exécution une seule fois
- Filtrez tôt - Réduisez les données à la source
- Sélectionnez uniquement les colonnes nécessaires - L’élagage des colonnes améliore les performances
- Utilisez
explain()pour comprendre l’exécution - Déboguez avant d’exécuter - Laissez SQL gérer les agrégations - ClickHouse est optimisé pour cela
- Sachez ce qui déclenche l’exécution - Évitez un déclenchement prématuré par inadvertance
- Utilisez la mise en cache à bon escient - Comprenez quand le cache est invalidé