Pular para o conteúdo principal
O DataStore permite controle detalhado da execução em nível de função, incluindo a seleção do motor e a correção de Dtype.

Configuração de Function Motor

Substitua o mecanismo de execução de funções específicas.

Configuração de Function Engines

from chdb.datastore.config import function_config

# Forçar funções específicas a usar chdb
function_config.use_chdb('length', 'substring', 'concat')

# Forçar funções específicas a usar pandas
function_config.use_pandas('upper', 'lower', 'capitalize')

# Definir preferência padrão
function_config.prefer_chdb()    # Padrão: chdb
function_config.prefer_pandas()  # Padrão: pandas

# Redefinir para automático
function_config.reset()

Quando usar

Force o uso de chdb para:
  • Funções com melhor desempenho no ClickHouse
  • Funções que se beneficiam da otimização por SQL
  • Operações de texto/data-hora em larga escala
Force o uso de pandas para:
  • Funções com comportamento específico do pandas
  • Quando for necessária compatibilidade exata com o pandas
  • Operações de texto personalizadas

Exemplo

from chdb import datastore as pd
from chdb.datastore.config import function_config

# Configurar os motores das funções
function_config.use_chdb('length', 'substring')
function_config.use_pandas('upper')

ds = pd.read_csv("data.csv")

# length() usará chdb
ds['name_len'] = ds['name'].str.len()

# substring() usará chdb  
ds['prefix'] = ds['name'].str.slice(0, 3)

# upper() usará pandas
ds['name_upper'] = ds['name'].str.upper()

Funções em comum

Mais de 159 funções estão disponíveis nos motores chdb e pandas:
CategoriaFunções
Textolength, upper, lower, trim, ltrim, rtrim, concat, substring, replace, reverse, contains, startswith, endswith
Matemáticaabs, round, floor, ceil, exp, log, log10, sqrt, pow, sin, cos, tan
Data e horayear, month, day, hour, minute, second, dayofweek, dayofyear, quarter
Agregaçãosum, avg, min, max, count, std, var, median
Para funções em comum, o motor é selecionado com base em:
  1. Configuração explícita da função (se definida)
  2. Configuração global execution_engine
  3. Seleção automática com base no contexto

Funções exclusivas do chdb

Algumas funções estão disponíveis apenas no ClickHouse:
CategoriaFunções
ArrayarraySum, arrayAvg, arraySort, arrayDistinct, groupArray, arrayElement
JSONJSONExtractString, JSONExtractInt, JSONExtractFloat, JSONHas
URLdomain, path, protocol, extractURLParameter
IPIPv4StringToNum, IPv4NumToString, isIPv4String
GeogreatCircleDistance, geoDistance, geoToH3
HashcityHash64, xxHash64, sipHash64, MD5, SHA256
CondicionalsumIf, countIf, avgIf, minIf, maxIf
Essas funções usam automaticamente o motor chdb, independentemente da configuração.

Funções exclusivas do pandas

Algumas funções estão disponíveis apenas no pandas:
CategoriaFunções
ApplyFunções lambda personalizadas, funções definidas pelo usuário
Complex PivotTabelas dinâmicas com agregações personalizadas
Stack/UnstackOperações complexas de remodelagem
InterpolateMétodos de interpolação de séries temporais
Essas funções usam automaticamente o motor do pandas, independentemente da configuração.

Correção de Dtype

Configure como o DataStore ajusta os tipos de dados entre motores.

Níveis de correção

from chdb.datastore.dtype_correction.config import CorrectionLevel
from chdb.datastore.config import config

# Sem correção
config.set_correction_level(CorrectionLevel.NONE)

# Apenas tipos críticos (tratamento de NULL, booleano)
config.set_correction_level(CorrectionLevel.CRITICAL)

# Alta prioridade (padrão) - incompatibilidades de tipo comuns
config.set_correction_level(CorrectionLevel.HIGH)

# Médio - correção mais agressiva
config.set_correction_level(CorrectionLevel.MEDIUM)

# Todos - corrigir todos os tipos possíveis
config.set_correction_level(CorrectionLevel.ALL)

Detalhes do nível de correção

NívelDescriçãoTipos corrigidos
NONENenhuma correção automáticaNenhum
CRITICALCorreções essenciaisTratamento de NULL, conversão de booleanos
HIGH (padrão)Correções comunsPrecisão de inteiros/números de ponto flutuante, data e hora, codificação de strings
MEDIUMMais correçõesPrecisão decimal, tratamento de fuso horário
ALLCorreção máximaTodas as diferenças de tipo

Quando os tipos precisam ser corrigidos

Diferenças entre tipos podem ocorrer quando:
  1. ClickHouse → pandas: Diferentes tamanhos de inteiros (Int64 vs int64)
  2. pandas → ClickHouse: Objetos Python para tipos SQL
  3. Tratamento de NULL: NA do pandas vs NULL do ClickHouse
  4. Booleano: Diferentes representações booleanas
  5. DateTime: Diferenças de fuso horário

Exemplo

from chdb.datastore.dtype_correction.config import CorrectionLevel
from chdb.datastore.config import config

# Modo estrito - espera correspondências exatas de tipo
config.set_correction_level(CorrectionLevel.NONE)

# Modo relaxado - corrige automaticamente problemas de tipo
config.set_correction_level(CorrectionLevel.ALL)

API de configuração de função

Objeto function_config

from chdb.datastore.config import function_config

# Forçar engine para funções
function_config.use_chdb(*function_names)
function_config.use_pandas(*function_names)

# Definir preferência padrão
function_config.prefer_chdb()
function_config.prefer_pandas()

# Redefinir para o padrão (auto)
function_config.reset()

# Verificar configuração
function_config.get_engine('length')  # Retorna 'chdb', 'pandas' ou 'auto'

Sobrescrita por chamada

Alguns métodos permitem sobrescrever o motor em cada chamada:
# Usando o parâmetro engine (quando suportado)
ds['result'] = ds['col'].str.upper(engine='pandas')

Boas práticas

1. Comece com as configurações padrão

# Use o modo automático, deixe o DataStore decidir
config.use_auto()

2. Configure cargas de trabalho específicas

# Para processamento de strings otimizado para ClickHouse
function_config.use_chdb('length', 'substring', 'concat')

# Para comportamento de strings compatível com pandas
function_config.use_pandas('upper', 'lower')

3. Use o nível de correção adequado

# Desenvolvimento: mais flexível
config.set_correction_level(CorrectionLevel.ALL)

# Produção: mais rigoroso
config.set_correction_level(CorrectionLevel.HIGH)

4. Teste os dois motores

# Testar com chdb
config.use_chdb()
result_chdb = process_data()

# Testar com pandas
config.use_pandas()
result_pandas = process_data()

# Comparar resultados
assert result_chdb.equals(result_pandas)
Última modificação em 10 de junho de 2026