> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-fix-nav-issues.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Configuración a nivel de función

> Configura el motor de ejecución y la corrección de Dtype a nivel de función

DataStore permite un control preciso de la ejecución a nivel de función, incluida la selección del motor y la corrección de Dtype.

<div id="function-engine">
  ## Configuración de Function Motor
</div>

Sobrescribe el motor de ejecución de funciones específicas.

<div id="setting-engines">
  ### Configurar Function Motors
</div>

```python theme={null}
from chdb.datastore.config import function_config

# Forzar funciones específicas para usar chdb
function_config.use_chdb('length', 'substring', 'concat')

# Forzar funciones específicas para usar pandas
function_config.use_pandas('upper', 'lower', 'capitalize')

# Establecer preferencia predeterminada
function_config.prefer_chdb()    # Usar chdb por defecto
function_config.prefer_pandas()  # Usar pandas por defecto

# Restablecer a automático
function_config.reset()
```

<div id="when-to-use">
  ### Cuándo usar
</div>

**Forzar chdb para:**

* Funciones con mejor rendimiento en ClickHouse
* Funciones que se benefician de la optimización SQL
* Operaciones de cadenas de texto/fecha y hora a gran escala

**Forzar pandas para:**

* Funciones con comportamiento específico de pandas
* Cuando se requiere compatibilidad exacta con pandas
* Operaciones de cadenas de texto personalizadas

<div id="function-example">
  ### Ejemplo
</div>

```python theme={null}
from chdb import datastore as pd
from chdb.datastore.config import function_config

# Configurar motores de funciones
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()
```

***

<div id="overlapping">
  ## Funciones coincidentes
</div>

Hay más de 159 funciones disponibles en los motores chdb y pandas:

| Categoría        | Funciones                                                                                                                               |
| ---------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| **Cadenas**      | `length`, `upper`, `lower`, `trim`, `ltrim`, `rtrim`, `concat`, `substring`, `replace`, `reverse`, `contains`, `startswith`, `endswith` |
| **Matemáticas**  | `abs`, `round`, `floor`, `ceil`, `exp`, `log`, `log10`, `sqrt`, `pow`, `sin`, `cos`, `tan`                                              |
| **Fecha y hora** | `year`, `month`, `day`, `hour`, `minute`, `second`, `dayofweek`, `dayofyear`, `quarter`                                                 |
| **Agregación**   | `sum`, `avg`, `min`, `max`, `count`, `std`, `var`, `median`                                                                             |

Para las funciones coincidentes, el motor se selecciona en función de:

1. La configuración explícita de la función (si se ha definido)
2. La configuración global de execution\_engine
3. La selección automática según el contexto

***

<div id="chdb-only">
  ## Funciones solo de chdb
</div>

Algunas funciones solo están disponibles a través de ClickHouse:

| Categoría       | Funciones                                                                          |
| --------------- | ---------------------------------------------------------------------------------- |
| **Array**       | `arraySum`, `arrayAvg`, `arraySort`, `arrayDistinct`, `groupArray`, `arrayElement` |
| **JSON**        | `JSONExtractString`, `JSONExtractInt`, `JSONExtractFloat`, `JSONHas`               |
| **URL**         | `domain`, `path`, `protocol`, `extractURLParameter`                                |
| **IP**          | `IPv4StringToNum`, `IPv4NumToString`, `isIPv4String`                               |
| **Geo**         | `greatCircleDistance`, `geoDistance`, `geoToH3`                                    |
| **Hash**        | `cityHash64`, `xxHash64`, `sipHash64`, `MD5`, `SHA256`                             |
| **Condicional** | `sumIf`, `countIf`, `avgIf`, `minIf`, `maxIf`                                      |

Estas funciones usan automáticamente el motor chdb, independientemente de la configuración.

***

<div id="pandas-only">
  ## Funciones exclusivas de pandas
</div>

Algunas funciones solo están disponibles a través de pandas:

| Categoría          | Funciones                                                           |
| ------------------ | ------------------------------------------------------------------- |
| **Aplicar**        | Funciones lambda personalizadas, funciones definidas por el usuario |
| **Pivot complejo** | Tablas dinámicas con agregaciones personalizadas                    |
| **Stack/Unstack**  | Operaciones complejas de reorganización                             |
| **Interpolate**    | Métodos de interpolación de series temporales                       |

Estas funciones usan automáticamente el motor de pandas, independientemente de la configuración.

***

<div id="dtype-correction">
  ## Corrección de dtype
</div>

Configura cómo DataStore corrige los tipos de datos entre motores.

<div id="correction-levels">
  ### Niveles de corrección
</div>

```python theme={null}
from chdb.datastore.dtype_correction.config import CorrectionLevel
from chdb.datastore.config import config

# Sin corrección
config.set_correction_level(CorrectionLevel.NONE)

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

# Alta prioridad (predeterminado) - discrepancias de tipos comunes
config.set_correction_level(CorrectionLevel.HIGH)

# Medio - corrección más agresiva
config.set_correction_level(CorrectionLevel.MEDIUM)

# Todos - corregir todos los tipos posibles
config.set_correction_level(CorrectionLevel.ALL)
```

<div id="level-details">
  ### Detalles del nivel de corrección
</div>

| Nivel                   | Descripción               | Tipos corregidos                                                      |
| ----------------------- | ------------------------- | --------------------------------------------------------------------- |
| `NONE`                  | Sin corrección automática | Ninguno                                                               |
| `CRITICAL`              | Correcciones esenciales   | Manejo de NULL, conversión de valores booleanos                       |
| `HIGH` (predeterminado) | Correcciones habituales   | Precisión de enteros/flotantes, fecha y hora, codificación de cadenas |
| `MEDIUM`                | Más correcciones          | Precisión decimal, manejo de zonas horarias                           |
| `ALL`                   | Corrección máxima         | Todas las diferencias de tipos                                        |

<div id="when-correction">
  ### Cuando es necesario corregir los tipos
</div>

Las diferencias entre tipos pueden producirse cuando:

1. **ClickHouse → pandas**: Distintos tamaños de enteros (Int64 vs int64)
2. **pandas → ClickHouse**: Objetos de Python convertidos a tipos SQL
3. **Manejo de NULL**: pandas NA vs ClickHouse NULL
4. **Boolean**: Distintas representaciones booleanas
5. **DateTime**: Diferencias de zona horaria

<div id="function-example">
  ### Ejemplo
</div>

```python theme={null}
from chdb.datastore.dtype_correction.config import CorrectionLevel
from chdb.datastore.config import config

# Modo estricto - espera coincidencias exactas de tipos
config.set_correction_level(CorrectionLevel.NONE)

# Modo relajado - corrige automáticamente problemas de tipos
config.set_correction_level(CorrectionLevel.ALL)
```

***

<div id="api">
  ## API de configuración de funciones
</div>

<div id="function-config-object">
  ### Objeto function\_config
</div>

```python theme={null}
from chdb.datastore.config import function_config

# Forzar motor para funciones
function_config.use_chdb(*function_names)
function_config.use_pandas(*function_names)

# Establecer preferencia predeterminada
function_config.prefer_chdb()
function_config.prefer_pandas()

# Restablecer al valor predeterminado (auto)
function_config.reset()

# Verificar configuración
function_config.get_engine('length')  # Devuelve 'chdb', 'pandas' o 'auto'
```

<div id="per-call">
  ### Sobrescritura en cada llamada
</div>

Algunos métodos permiten sobrescribir el motor en cada llamada:

```python theme={null}
# Usando el parámetro engine (donde sea compatible)
ds['result'] = ds['col'].str.upper(engine='pandas')
```

***

<div id="best-practices">
  ## Buenas prácticas
</div>

<div id="start-with-defaults">
  ### 1. Empiece por los valores predeterminados
</div>

```python theme={null}
# Usar el modo automático, dejar que DataStore decida
config.use_auto()
```

<div id="configure-for-specific-workloads">
  ### 2. Configurar para cargas de trabajo específicas
</div>

```python theme={null}
# Para procesamiento de cadenas optimizado para ClickHouse
function_config.use_chdb('length', 'substring', 'concat')

# Para comportamiento de cadenas compatible con pandas
function_config.use_pandas('upper', 'lower')
```

<div id="use-appropriate-correction-level">
  ### 3. Usar el nivel de corrección adecuado
</div>

```python theme={null}
# Desarrollo: más permisivo
config.set_correction_level(CorrectionLevel.ALL)

# Producción: más estricto
config.set_correction_level(CorrectionLevel.HIGH)
```

<div id="test-both-engines">
  ### 4. Pruebe ambos motores
</div>

```python theme={null}
# Probar con chdb
config.use_chdb()
result_chdb = process_data()

# Probar con pandas
config.use_pandas()
result_pandas = process_data()

# Comparar resultados
assert result_chdb.equals(result_pandas)
```
