Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

DataStore: API compatible con pandas con optimización SQL

DataStore es la API compatible con pandas de chDB que combina la conocida interfaz de DataFrame de Pandas con la potencia de la optimización de consultas SQL y le permite escribir código al estilo de pandas mientras obtiene el rendimiento de ClickHouse.

Características principales

  • Compatibilidad con Pandas: 209 métodos de pandas DataFrame, 56 métodos .str, 42+ métodos .dt
  • Optimización SQL: Las operaciones se compilan automáticamente como consultas SQL optimizadas
  • Evaluación diferida: Las operaciones se aplazan hasta que se necesitan los resultados
  • 630+ métodos de API: Amplia API para la manipulación de datos
  • Extensiones de ClickHouse: Accesores adicionales (.arr, .json, .url, .ip, .geo) no disponibles en pandas

Arquitectura

Arquitectura de DataStore

DataStore usa evaluación diferida con ejecución con doble motor:

  1. Cadena de operaciones diferidas: las operaciones se registran, no se ejecutan de inmediato
  2. Selección inteligente de motor: QueryPlanner dirige cada segmento al motor óptimo (chDB para SQL, Pandas para operaciones complejas)
  3. Caché intermedia: los resultados se almacenan en caché en cada paso para agilizar la exploración iterativa

Consulta Modelo de ejecución para obtener más detalles.

Migración en una sola línea desde 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()

Su código actual de pandas funciona sin cambios, pero ahora se ejecuta en el motor de ClickHouse.

Comparación de rendimiento

DataStore ofrece mejoras significativas de rendimiento respecto a pandas, especialmente en agregaciones y canalizaciones complejas:

Operación Pandas DataStore Aumento de velocidad
GroupBy count 347ms 17ms 19.93x
Canalización compleja 2,047ms 380ms 5.39x
Filter+Sort+Head 1,537ms 350ms 4.40x
GroupBy agg 406ms 141ms 2.88x

Benchmark con 10 M de filas. Consulta el script de benchmark y la Guía de rendimiento para obtener más detalles.

Cuándo usar DataStore

Usa DataStore cuando:

  • Trabajas con conjuntos de datos grandes (millones de filas)
  • Realizas agregaciones y operaciones de GroupBy
  • Consultas datos de archivos, bases de datos o almacenamiento en la nube
  • Creas canalizaciones de datos complejas
  • Quieres la API de pandas con mejor rendimiento

Usa la API de SQL puro cuando:

  • Prefieres escribir SQL directamente
  • Necesitas un control preciso sobre la ejecución de consultas
  • Trabajas con funciones específicas de ClickHouse que no están expuestas en la API de pandas

Comparación de características

Característica Pandas Polars DuckDB DataStore
Compatible con la API de Pandas - Parcial No Completa
Evaluación diferida No
Soporte para consultas SQL No
Funciones de ClickHouse No No No
Accesores de String/DateTime No Sí + extras
Array/JSON/URL/IP/Geo No Parcial No
Consultas directas sobre archivos No
Soporte de almacenamiento en la nube No Limitado

Estadísticas de la API

Categoría Cantidad Cobertura
Métodos de DataFrame 209 100% de pandas
Accesor Series.str 56 100% de pandas
Accesor Series.dt 42+ 100%+ (incluye extras de ClickHouse)
Accesor Series.arr 37 Específico de ClickHouse
Accesor Series.json 13 Específico de ClickHouse
Accesor Series.url 15 Específico de ClickHouse
Accesor Series.ip 9 Específico de ClickHouse
Accesor Series.geo 14 Específico de ClickHouse
Total de métodos de la API 630+ -

Primeros pasos

Referencia de la API

Temas avanzados

Configuración y depuración

Guías para usuarios de Pandas

Ejemplo rápido

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 DataFrame de Pandas

Próximos pasos

Navigation