Saltar al contenido principal
DataStore proporciona 7 espacios de nombres de accesores con más de 185 métodos para operaciones específicas del dominio.
AccesorMétodosDescripción
.str56Operaciones con cadena
.dt42+Operaciones con DateTime
.arr37Operaciones con Array (específicas de ClickHouse)
.json13Análisis sintáctico de JSON (específico de ClickHouse)
.url15Análisis sintáctico de URL (específico de ClickHouse)
.ip9Operaciones con direcciones IP (específicas de ClickHouse)
.geo14Operaciones geoespaciales/de distancia (específicas de ClickHouse)

Accesor de cadenas (.str)

Se admiten los 56 métodos .str de pandas, además de las funciones de cadenas de ClickHouse.

Conversión de mayúsculas y minúsculas

MétodoClickHouseDescripción
upper()upper()Convertir a mayúsculas
lower()lower()Convertir a minúsculas
capitalize()initcap()Convertir la primera letra en mayúscula
title()initcap()Convertir a formato de título
swapcase()-Intercambiar mayúsculas y minúsculas
casefold()lower()Plegado de mayúsculas y minúsculas
ds['name_upper'] = ds['name'].str.upper()
ds['name_title'] = ds['name'].str.title()

Longitud y tamaño

MétodoClickHouseDescripción
len()length()Longitud de la cadena (bytes)
char_length()char_length()Longitud en caracteres
ds['name_len'] = ds['name'].str.len()

Subcadenas y slicing

MétodoClickHouseDescripción
slice(start, stop)substring()Extraer subcadena
slice_replace()-Reemplazar segmento
left(n)left()Los n primeros caracteres
right(n)right()Los n últimos caracteres
get(i)-Carácter en el índice
ds['first_3'] = ds['name'].str.slice(0, 3)
ds['last_4'] = ds['name'].str.right(4)

Eliminación de espacios

MétodoClickHouseDescripción
strip()trim()Eliminar espacios en blanco
lstrip()trimLeft()Eliminar espacios en blanco al inicio
rstrip()trimRight()Eliminar espacios en blanco al final
ds['trimmed'] = ds['text'].str.strip()
MétodoClickHouseDescripción
contains(pat)position()Contiene una subcadena
startswith(pat)startsWith()Empieza con un prefijo
endswith(pat)endsWith()Termina con un sufijo
find(sub)position()Busca la posición
rfind(sub)-Busca desde la derecha
index(sub)position()Busca o genera un error
rindex(sub)-Busca desde la derecha o genera un error
match(pat)match()Coincidencia con regex
fullmatch(pat)-Coincidencia completa con regex
count(pat)-Cuenta las apariciones
# Contiene subcadena
ds['has_john'] = ds['name'].str.contains('John')

# Coincidencia con expresión regular
ds['valid_email'] = ds['email'].str.match(r'^[\w.-]+@[\w.-]+\.\w+$')

Reemplazar

MétodoClickHouseDescripción
replace(pat, repl)replace()Sustituir coincidencias
replace(pat, repl, regex=True)replaceRegexpAll()Sustitución con regex
removeprefix(prefix)-Quitar prefijo
removesuffix(suffix)-Quitar sufijo
translate(table)-Traducir caracteres
ds['cleaned'] = ds['text'].str.replace('\n', ' ')
ds['digits_only'] = ds['phone'].str.replace(r'\D', '', regex=True)

Separación

MétodoClickHouseDescripción
split(sep)splitByString()Separar en un array
rsplit(sep)-Separar desde la derecha
partition(sep)-Separar en 3 partes
rpartition(sep)-Separar desde la derecha en 3
ds['parts'] = ds['path'].str.split('/')

Relleno

MétodoClickHouseDescripción
pad(width)leftPad()Rellenar a la izquierda
ljust(width)rightPad()Alinear a la derecha
rjust(width)leftPad()Alinear a la izquierda
center(width)-Centrar
zfill(width)leftPad(..., '0')Rellenar con ceros
ds['padded_id'] = ds['id'].astype(str).str.zfill(6)

Pruebas de caracteres

MétodoDescripción
isalpha()Todos alfabéticos
isdigit()Todos dígitos
isalnum()Alfanumérico
isspace()Todos los espacios en blanco
isupper()Todo en mayúsculas
islower()Todo en minúsculas
istitle()Formato de título
isnumeric()Caracteres numéricos
isdecimal()Caracteres decimales
ds['is_numeric'] = ds['code'].str.isdigit()

Otros

MétodoDescripción
repeat(n)Repetir n veces
reverse()Invertir la cadena
wrap(width)Ajustar el texto
encode(enc)Codificar
decode(enc)Decodificar
normalize(form)Normalizar en Unicode
extract(pat)Extraer grupos de regex
extractall(pat)Extraer todas las coincidencias
cat(sep)Concatenar todo
get_dummies(sep)Variables dummy

Accesor DateTime (.dt)

Los más de 42 métodos .dt de pandas, además de las funciones de fecha y hora de ClickHouse.

Componentes de fecha

PropiedadClickHouseDescripción
yeartoYear()Año
monthtoMonth()Mes (1-12)
daytoDayOfMonth()Día (1-31)
hourtoHour()Hora (0-23)
minutetoMinute()Minuto (0-59)
secondtoSecond()Segundo (0-59)
millisecondtoMillisecond()Milisegundo
microsecondtoMicrosecond()Microsegundo
quartertoQuarter()Trimestre (1-4)
dayofweektoDayOfWeek()Día de la semana (0=lun)
dayofyeartoDayOfYear()Día del año
weektoWeek()Número de semana
days_in_month-Días del mes
ds['year'] = ds['date'].dt.year
ds['month'] = ds['date'].dt.month
ds['day_of_week'] = ds['date'].dt.dayofweek

Truncamiento

MétodoClickHouseDescripción
to_start_of_day()toStartOfDay()Inicio del día
to_start_of_week()toStartOfWeek()Inicio de la semana
to_start_of_month()toStartOfMonth()Inicio del mes
to_start_of_quarter()toStartOfQuarter()Inicio del trimestre
to_start_of_year()toStartOfYear()Inicio del año
to_start_of_hour()toStartOfHour()Inicio de la hora
to_start_of_minute()toStartOfMinute()Inicio del minuto
ds['month_start'] = ds['date'].dt.to_start_of_month()

Aritmética

MétodoClickHouseDescripción
add_years(n)addYears()Sumar años
add_months(n)addMonths()Sumar meses
add_weeks(n)addWeeks()Sumar semanas
add_days(n)addDays()Sumar días
add_hours(n)addHours()Sumar horas
add_minutes(n)addMinutes()Sumar minutos
add_seconds(n)addSeconds()Sumar segundos
subtract_years(n)subtractYears()Restar años
subtract_months(n)subtractMonths()Restar meses
subtract_days(n)subtractDays()Restar días
ds['next_month'] = ds['date'].dt.add_months(1)
ds['last_week'] = ds['date'].dt.subtract_weeks(1)

Comprobaciones booleanas

MétodoDescripción
is_month_start()Primer día del mes
is_month_end()Último día del mes
is_quarter_start()Primer día del trimestre
is_quarter_end()Último día del trimestre
is_year_start()Primer día del año
is_year_end()Último día del año
is_leap_year()Año bisiesto
ds['is_eom'] = ds['date'].dt.is_month_end()

Formato

MétodoClickHouseDescripción
strftime(fmt)formatDateTime()Dar formato como cadena
day_name()-Nombre del día
month_name()-Nombre del mes
ds['date_str'] = ds['date'].dt.strftime('%Y-%m-%d')
ds['day_name'] = ds['date'].dt.day_name()

Zona horaria

MétodoClickHouseDescripción
tz_convert(tz)toTimezone()Convertir la zona horaria
tz_localize(tz)-Asignar una zona horaria
ds['utc_time'] = ds['timestamp'].dt.tz_convert('UTC')

Accesor de Array (.arr)

Operaciones con arrays específicas de ClickHouse (37 métodos).

Propiedades

PropiedadClickHouseDescripción
lengthlength()Longitud del array
sizelength()Alias de length
emptyempty()Está vacío
not_emptynotEmpty()No está vacío
ds['tag_count'] = ds['tags'].arr.length
ds['has_tags'] = ds['tags'].arr.not_empty

Acceso a elementos

MétodoClickHouseDescripción
array_first()arrayElement(..., 1)Primer elemento
array_last()arrayElement(..., -1)Último elemento
array_element(n)arrayElement()Elemento n.º
array_slice(off, len)arraySlice()Segmento del array
ds['first_tag'] = ds['tags'].arr.array_first()
ds['last_tag'] = ds['tags'].arr.array_last()

Agregaciones

MétodoClickHouseDescripción
array_sum()arraySum()Suma de elementos
array_avg()arrayAvg()Promedio
array_min()arrayMin()Mínimo
array_max()arrayMax()Máximo
array_product()arrayProduct()Producto
array_uniq()arrayUniq()Número de valores únicos
ds['total'] = ds['values'].arr.array_sum()
ds['average'] = ds['values'].arr.array_avg()

Transformaciones

MétodoClickHouseDescripción
array_sort()arraySort()Ordenar de forma ascendente
array_reverse_sort()arrayReverseSort()Ordenar de forma descendente
array_reverse()arrayReverse()Invertir el orden
array_distinct()arrayDistinct()Elementos únicos
array_compact()arrayCompact()Eliminar duplicados consecutivos
array_flatten()arrayFlatten()Aplanar estructuras anidadas
ds['sorted_tags'] = ds['tags'].arr.array_sort()
ds['unique_tags'] = ds['tags'].arr.array_distinct()

Modificaciones

MétodoClickHouseDescripción
array_push_back(elem)arrayPushBack()Agregar al final
array_push_front(elem)arrayPushFront()Agregar al principio
array_pop_back()arrayPopBack()Eliminar el último
array_pop_front()arrayPopFront()Eliminar el primero
array_concat(other)arrayConcat()Concatenar
MétodoClickHouseDescripción
has(elem)has()Contiene un elemento
index_of(elem)indexOf()Busca el índice
count_equal(elem)countEqual()Cuenta las apariciones
ds['has_python'] = ds['skills'].arr.has('Python')

Operaciones con cadenas

MétodoClickHouseDescripción
array_string_concat(sep)arrayStringConcat()Combinar en una cadena
ds['tags_str'] = ds['tags'].arr.array_string_concat(', ')

accesor JSON (.json)

Análisis sintáctico de JSON específico de ClickHouse (13 métodos).
MétodoClickHouseDescripción
get_string(path)JSONExtractString()Extraer cadena
get_int(path)JSONExtractInt()Extraer entero
get_float(path)JSONExtractFloat()Extraer flotante
get_bool(path)JSONExtractBool()Extraer booleano
get_raw(path)JSONExtractRaw()Extraer JSON sin procesar
get_keys()JSONExtractKeys()Obtener claves
get_type(path)JSONType()Obtener tipo
get_length(path)JSONLength()Obtener longitud
has_key(key)JSONHas()Comprobar si la clave existe
is_valid()isValidJSON()Validar JSON
to_json_string()toJSONString()Convertir a JSON
# Parsear columnas JSON
ds['user_name'] = ds['json_data'].json.get_string('user.name')
ds['user_age'] = ds['json_data'].json.get_int('user.age')
ds['is_active'] = ds['json_data'].json.get_bool('user.active')
ds['has_email'] = ds['json_data'].json.has_key('user.email')

Accesor de URL (.url)

Análisis de URL específico de ClickHouse (15 métodos).
MétodoClickHouseDescripción
domain()domain()Extraer dominio
domain_without_www()domainWithoutWWW()Dominio sin www
top_level_domain()topLevelDomain()TLD
protocol()protocol()Protocolo (http/https)
path()path()Ruta de la URL
path_full()pathFull()Ruta con consulta
query_string()queryString()Cadena de consulta
fragment()fragment()Fragmento (#…)
port()port()Número de puerto
extract_url_parameter(name)extractURLParameter()Obtener parámetro de consulta
extract_url_parameters()extractURLParameters()Todos los parámetros
cut_url_parameter(name)cutURLParameter()Eliminar parámetro
decode_url_component()decodeURLComponent()Decodificar componente de URL
encode_url_component()encodeURLComponent()Codificar componente de URL
# Parsear URLs
ds['domain'] = ds['url'].url.domain()
ds['path'] = ds['url'].url.path()
ds['utm_source'] = ds['url'].url.extract_url_parameter('utm_source')

accesor de IP (.ip)

Operaciones sobre direcciones IP específicas de ClickHouse (9 métodos).
MétodoClickHouseDescripción
to_ipv4()toIPv4()Convertir a IPv4
to_ipv6()toIPv6()Convertir a IPv6
ipv4_num_to_string()IPv4NumToString()Número a cadena
ipv4_string_to_num()IPv4StringToNum()Cadena a número
ipv6_num_to_string()IPv6NumToString()IPv6 a cadena
ipv4_to_ipv6()IPv4ToIPv6()Convertir a IPv6
is_ipv4_string()isIPv4String()Validar IPv4
is_ipv6_string()isIPv6String()Validar IPv6
ipv4_cidr_to_range(cidr)IPv4CIDRToRange()CIDR a rango
# Operaciones IP
ds['is_valid_ip'] = ds['ip'].ip.is_ipv4_string()
ds['ip_num'] = ds['ip'].ip.ipv4_string_to_num()

Accesor Geo (.geo)

Operaciones geoespaciales y de distancia específicas de ClickHouse (14 métodos).

Funciones de distancia

MétodoClickHouseDescripción
great_circle_distance(...)greatCircleDistance()Distancia del círculo máximo
geo_distance(...)geoDistance()Distancia WGS-84
l1_distance(v1, v2)L1Distance()Distancia de Manhattan
l2_distance(v1, v2)L2Distance()Distancia euclidiana
l2_squared_distance(v1, v2)L2SquaredDistance()Distancia euclidiana al cuadrado
linf_distance(v1, v2)LinfDistance()Distancia de Chebyshev
cosine_distance(v1, v2)cosineDistance()Distancia de coseno

Operaciones vectoriales

MétodoClickHouseDescripción
dot_product(v1, v2)dotProduct()Producto escalar
l2_norm(vec)L2Norm()Norma del vector
l2_normalize(vec)L2Normalize()Normalización

Funciones H3

MétodoClickHouseDescripción
geo_to_h3(lon, lat, res)geoToH3()De Geo al índice H3
h3_to_geo(h3)h3ToGeo()De H3 a coordenadas geográficas

Operaciones sobre puntos

MétodoClickHouseDescripción
point_in_polygon(pt, poly)pointInPolygon()Punto dentro de un polígono
point_in_ellipses(...)pointInEllipses()Punto dentro de elipses
from chdb.datastore import F

# Calcular distancias
ds['distance'] = F.great_circle_distance(
    ds['lon1'], ds['lat1'],
    ds['lon2'], ds['lat2']
)

# Similitud vectorial
ds['similarity'] = F.cosine_distance(ds['embedding1'], ds['embedding2'])

Uso de los accesores

Evaluación diferida

La mayoría de los métodos de accesor son diferidos: devuelven expresiones que se evalúan más adelante:
# Todas estas son perezosas
ds['name_upper'] = ds['name'].str.upper()  # Aún no se ejecuta
ds['year'] = ds['date'].dt.year            # Aún no se ejecuta
ds['domain'] = ds['url'].url.domain()      # Aún no se ejecuta

# La ejecución ocurre al acceder a los resultados
df = ds.to_df()  # Ahora todo se ejecuta

Métodos que se ejecutan de inmediato

Algunos métodos de .str deben ejecutarse porque cambian la estructura:
MétodoDevuelvePor qué
partition(sep)DataStore (3 columnas)Crea varias columnas
rpartition(sep)DataStore (3 columnas)Crea varias columnas
get_dummies(sep)DataStore (N columnas)Número de columnas dinámico
extractall(pat)DataStoreResultado MultiIndex
cat(sep)strAgregación (N filas → 1)

Encadenar accesores

Los métodos de accesor pueden encadenarse:
ds['clean_name'] = (ds['name']
    .str.strip()
    .str.lower()
    .str.replace(' ', '_')
)

ds['next_month_start'] = (ds['date']
    .dt.add_months(1)
    .dt.to_start_of_month()
)
Última modificación el 10 de junio de 2026