Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

DataStore: API compatível com pandas com otimização SQL

DataStore é a API compatível com pandas do chDB que combina a interface familiar de DataFrame do pandas com o poder da otimização de consultas SQL, permitindo que você escreva código no estilo do pandas e obtenha o desempenho do ClickHouse.

Principais recursos

  • Compatibilidade com pandas: 209 métodos de DataFrame do pandas, 56 métodos .str, 42+ métodos .dt
  • Otimização de SQL: as operações são compiladas automaticamente para consultas SQL otimizadas
  • Lazy Evaluation: as operações são adiadas até que os resultados sejam necessários
  • 630+ métodos de API: API abrangente para manipulação de dados
  • Extensões do ClickHouse: acessores adicionais (.arr, .json, .url, .ip, .geo) não disponíveis no pandas

Arquitetura

Arquitetura do DataStore

O DataStore usa avaliação preguiçosa com execução com dois engines:

  1. Cadeia de Operações Lazy: as operações são registradas, não executadas imediatamente
  2. Seleção Inteligente de Engine: o QueryPlanner encaminha cada segmento para o engine ideal (chDB para SQL, Pandas para operações complexas)
  3. Cache Intermediário: os resultados são armazenados em cache em cada passo para exploração iterativa rápida

Consulte Modelo de Execução para mais detalhes.

Migração do Pandas com uma linha

# 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()

Seu código existente em pandas continua funcionando sem alterações, mas agora é executado pelo mecanismo do ClickHouse.

Comparação de desempenho

O DataStore oferece ganhos significativos de desempenho em relação ao pandas, especialmente em agregações e pipelines complexos:

Operação Pandas DataStore Ganho de desempenho
Contagem com GroupBy 347ms 17ms 19.93x
Pipeline complexo 2,047ms 380ms 5.39x
Filter+Sort+Head 1,537ms 350ms 4.40x
Agregação com GroupBy 406ms 141ms 2.88x

Benchmark com 10M de linhas. Consulte o script de benchmark e o Guia de desempenho para mais detalhes.

Quando usar o DataStore

Use o DataStore quando:

  • Estiver trabalhando com grandes conjuntos de dados (milhões de linhas)
  • Precisar realizar agregações e operações de GroupBy
  • Precisar consultar dados de arquivos, bancos de dados ou armazenamento em nuvem
  • Estiver criando pipelines de dados complexos
  • Quiser a API do pandas com melhor desempenho

Use a API de SQL direto quando:

  • Preferir escrever SQL diretamente
  • Precisar de controle mais granular sobre a execução de consultas
  • Estiver trabalhando com recursos específicos do ClickHouse não expostos na API do pandas

Comparação de funcionalidades

Funcionalidade Pandas Polars DuckDB DataStore
Compatível com a API do Pandas - Parcial Não Completa
Avaliação preguiçosa Não Sim Sim Sim
Suporte a consultas SQL Não Sim Sim Sim
Funções do ClickHouse Não Não Não Sim
Acessores de String/DateTime Sim Sim Não Sim + extras
Array/JSON/URL/IP/Geo Não Parcial Não Sim
Consultas diretas em arquivos Não Sim Sim Sim
Suporte a armazenamento em nuvem Não Limitado Sim Sim

Estatísticas da API

Categoria Contagem Cobertura
Métodos de DataFrame 209 100% do pandas
Acessor Series.str 56 100% do pandas
Acessor Series.dt 42+ 100%+ (inclui extras do ClickHouse)
Acessor Series.arr 37 Específico do ClickHouse
Acessor Series.json 13 Específico do ClickHouse
Acessor Series.url 15 Específico do ClickHouse
Acessor Series.ip 9 Específico do ClickHouse
Acessor Series.geo 14 Específico do ClickHouse
Total de métodos da API 630+ -

Primeiros passos

Referência da API

Tópicos avançados

Configuração e depuração

Guias do usuário do Pandas

Exemplo 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 pandas DataFrame

Próximos passos

Navigation