DataStore est l’API compatible avec pandas de chDB. Elle associe l’interface familière des DataFrame pandas à la puissance de l’optimisation des requêtes SQL et vous permet d’écrire du code dans le style de pandas tout en bénéficiant des performances de ClickHouse.
Fonctionnalités clés
- Compatibilité avec pandas : 209 méthodes de DataFrame pandas, 56 méthodes
.str, plus de 42 méthodes.dt - Optimisation SQL : les opérations sont automatiquement compilées en requêtes SQL optimisées
- Évaluation paresseuse : les opérations sont différées jusqu’à ce que les résultats soient nécessaires
- 630+ méthodes d’API : une API complète pour la manipulation des données
- Extensions ClickHouse : des accesseurs supplémentaires (
.arr,.json,.url,.ip,.geo) indisponibles dans pandas
Architecture

DataStore utilise une évaluation paresseuse avec une exécution sur deux moteurs :
- Chaîne d'opérations différées : les opérations sont enregistrées, et non exécutées immédiatement
- Sélection intelligente du moteur : QueryPlanner oriente chaque segment vers le moteur le plus adapté (chDB pour SQL, Pandas pour les opérations complexes)
- Mise en cache intermédiaire : les résultats sont mis en cache à chaque étape pour accélérer l'exploration itérative
Voir le Modèle d'exécution pour plus de détails.
Migration en une ligne depuis Pandas
# Before (pandas)
import pandas as pd
df = pd.read_csv("data.csv")
result = df[df['age'] > 25].groupby('city')['salary'].mean()
# After (DataStore) - just change the import!
from chdb import datastore as pd
df = pd.read_csv("data.csv")
result = df[df['age'] > 25].groupby('city')['salary'].mean()Votre code pandas existant fonctionne tel quel, mais s’exécute désormais sur le moteur ClickHouse.
Comparaison des performances
DataStore offre des gains de performances significatifs par rapport à pandas, en particulier pour l’agrégation et les pipelines complexes :
| Opération | Pandas | DataStore | Accélération |
|---|---|---|---|
| Count de GroupBy | 347ms | 17ms | 19.93x |
| Pipeline complexe | 2,047ms | 380ms | 5.39x |
| Filter+Sort+Head | 1,537ms | 350ms | 4.40x |
| Agrégation GroupBy | 406ms | 141ms | 2.88x |
Benchmark effectué sur 10M lignes. Voir le script de benchmark et le Guide des performances pour plus de détails.
Quand utiliser DataStore
Utilisez DataStore lorsque :
- Vous travaillez avec de grands jeux de données (des millions de lignes)
- Vous effectuez des agrégations et des opérations
groupby - Vous interrogez des données provenant de fichiers, de bases de données ou du stockage cloud
- Vous construisez des pipelines de données complexes
- Vous souhaitez bénéficier de l'API pandas avec de meilleures performances
Utilisez l'API SQL brut lorsque :
- Vous préférez écrire directement en SQL
- Vous avez besoin d'un contrôle fin sur l'exécution des requêtes
- Vous travaillez avec des fonctionnalités spécifiques à ClickHouse qui ne sont pas exposées dans l'API pandas
Comparaison des fonctionnalités
| Fonctionnalité | Pandas | Polars | DuckDB | DataStore |
|---|---|---|---|---|
| Compatible avec l'API Pandas | - | Partielle | Non | Complète |
| Évaluation paresseuse | Non | Oui | Oui | Oui |
| Prise en charge des requêtes SQL | Non | Oui | Oui | Oui |
| Fonctions ClickHouse | Non | Non | Non | Oui |
| Accesseurs String/DateTime | Oui | Oui | Non | Oui + extras |
| Array/JSON/URL/IP/Geo | Non | Partielle | Non | Oui |
| Requêtes directes sur des fichiers | Non | Oui | Oui | Oui |
| Prise en charge du stockage dans le cloud | Non | Limitée | Oui | Oui |
Statistiques de l’API
| Catégorie | Nombre | Couverture |
|---|---|---|
| Méthodes de DataFrame | 209 | 100 % de pandas |
| Accesseur Series.str | 56 | 100 % de pandas |
| Accesseur Series.dt | 42+ | 100 %+ (inclut des fonctionnalités supplémentaires de ClickHouse) |
| Accesseur Series.arr | 37 | Spécifique à ClickHouse |
| Accesseur Series.json | 13 | Spécifique à ClickHouse |
| Accesseur Series.url | 15 | Spécifique à ClickHouse |
| Accesseur Series.ip | 9 | Spécifique à ClickHouse |
| Accesseur Series.geo | 14 | Spécifique à ClickHouse |
| Total des méthodes de l’API | 630+ | - |
Prise en main
- Démarrage rapide - Installation et utilisation de base
- Migration depuis Pandas - Guide de migration étape par étape
Référence de l’API
- Méthodes de fabrique - Création de DataStore à partir de diverses sources
- Construction de requêtes - Opérations de requête de style SQL
- compatibilité avec pandas - Les 209 méthodes compatibles avec pandas
- Accesseurs - Accesseurs String, DateTime, Array, JSON, URL, IP et Geo
- Agrégation - Fonctions d’agrégation et fonctions de fenêtre
- Opérations d’E/S - Lecture et écriture de données
Sujets avancés
- Modèle d'exécution - Évaluation paresseuse et mise en cache
- Référence de classe - Référence complète de l’API
Configuration et débogage
- Configuration - Toutes les options de configuration
- Performance Mode - Mode axé SQL pour un débit maximal
- Débogage - Explain, profilage et journalisation
Guides d’utilisation de Pandas
- Recettes Pandas - Cas d’usage courants
- Principales différences - Différences importantes avec Pandas
- guide des performances - Conseils d’optimisation
- SQL pour les utilisateurs de Pandas - Comprendre le SQL sous-jacent aux opérations de Pandas
Exemple rapide
from chdb import datastore as pd
# Read data from various sources
ds = pd.read_csv("sales.csv")
# or: ds = pd.DataStore.uri("s3://bucket/sales.parquet")
# or: ds = pd.DataStore.from_mysql("mysql://user:pass@host/db/table")
# Familiar pandas operations - automatically optimized to SQL
result = (ds
.filter(ds['amount'] > 1000) # WHERE amount > 1000
.groupby('region') # GROUP BY region
.agg({'amount': ['sum', 'mean']}) # SUM(amount), AVG(amount)
.sort_values('sum', ascending=False) # ORDER BY sum DESC
.head(10) # LIMIT 10
)
# View the generated SQL
print(result.to_sql())
# Execute and get results
df = result.to_df() # Returns pandas DataFrameÉtapes suivantes
- Vous découvrez DataStore ? Commencez par le guide de démarrage rapide
- Vous venez de pandas ? Consultez le guide de migration
- Vous voulez en savoir plus ? Consultez la référence de l’API