Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Funciones de división de cadenas

alphaTokens

Introducido en: v1.1.0

Selecciona subcadenas de bytes consecutivos de los rangos a-z y A-Z y devuelve un Array con las subcadenas seleccionadas.

Sintaxis

alphaTokens(s[, max_substrings])

Alias: splitByAlpha

Argumentos

  • s — La cadena que se va a dividir. String
  • max_substrings — Opcional. Cuando max_substrings > 0, el número de subcadenas devueltas no será mayor que max_substrings; de lo contrario, la función devolverá tantas subcadenas como sea posible. Int64

Valor devuelto

Devuelve un Array de las subcadenas seleccionadas de s. Array(String)

Ejemplos

Ejemplo de uso

SELECT alphaTokens('abca1abc');
┌─alphaTokens('abca1abc')─┐
│ ['abca','abc']          │
└─────────────────────────┘

arrayStringConcat

Introducido en: v1.1.0

Concatena las representaciones en forma de cadena de los valores incluidos en el array usando el separador proporcionado, que es un parámetro opcional cuyo valor predeterminado es una cadena vacía.

Sintaxis

arrayStringConcat(arr[, separator])

Alias: array_to_string

Argumentos

  • arr — El array que se va a concatenar. Array(T)
  • separator — Opcional. Cadena separadora. De forma predeterminada, una cadena vacía. const String

Valor devuelto

Devuelve la cadena concatenada. String

Ejemplos

Ejemplo de uso

SELECT arrayStringConcat(['12/05/2021', '12:50:00'], ' ') AS DateString;
┌─DateString──────────┐
│ 12/05/2021 12:50:00 │
└─────────────────────┘

extractAllGroupsVertical

Introducido en: v20.5.0

Encuentra todos los grupos de una cadena mediante una expresión regular y devuelve un array de arrays, donde cada array contiene los fragmentos coincidentes de cada grupo, agrupados según el orden de aparición en la cadena de entrada.

Sintaxis

extractAllGroupsVertical(s, regexp)

Alias: extractAllGroups

Argumentos

Valor devuelto

Devuelve un array de arrays, donde cada array interno contiene los grupos capturados de una coincidencia. Cada coincidencia produce un array con elementos correspondientes a los grupos de captura de la expresión regular (grupo 1, grupo 2, etc.). Si no se encuentra ninguna coincidencia, devuelve un array vacío. Array(Array(String))

Ejemplos

Ejemplo de uso

WITH '< Server: nginx
< Date: Tue, 22 Jan 2019 00:26:14 GMT
< Content-Type: text/html; charset=UTF-8
< Connection: keep-alive
' AS s
SELECT extractAllGroupsVertical(s, '< ([\\w\\-]+): ([^\\r\\n]+)');
[['Server','nginx'],['Date','Tue, 22 Jan 2019 00:26:14 GMT'],['Content-Type','text/html; charset=UTF-8'],['Connection','keep-alive']]

naiveBayesNgrams

Introducido en: v26.7.0

Divide el texto en n-gramas usando la misma tokenización que un Diccionario Naive Bayes (el layout NAIVE_BAYES): modo byte, codepoint o token, con padding de límites opcional. Úselo para crear los datos de entrenamiento preagregados (ngram, class_id, count) que consume ese Diccionario, de modo que los n-gramas de entrenamiento coincidan exactamente con lo que naiveBayesClassifier produce durante la consulta.

Sintaxis

naiveBayesNgrams(text, n, mode[, start_token, end_token])

Argumentos

  • text — Texto que se va a dividir en n-gramas. String
  • n — Tamaño del n-grama, de 1 a 1024. const UInt
  • mode — Modo de tokenización: 'byte', 'codepoint' o 'token'. const String
  • start_token — Opcional. Token delimitador antepuesto (n-1) veces al texto de entrada; un número para 'byte'/'codepoint' y un literal para 'token'. Vacío significa que no hay relleno. const String
  • end_token — Opcional. Token delimitador añadido (n-1) veces al final del texto de entrada. const String

Valor devuelto

Los n-gramas del texto de entrada. Array(String)

Ejemplos

Bigramas de tokens

SELECT naiveBayesNgrams('the cat sat', 2, 'token');
['the cat','cat sat']

Bigramas de tokens con padding en los bordes

SELECT naiveBayesNgrams('cat', 2, 'token', '<s>', '</s>');
['<s> cat','cat </s>']

Bigramas de bytes con relleno en los extremos (resultado mostrado en hexadecimal)

SELECT arrayMap(x -> hex(x), naiveBayesNgrams('xy', 2, 'byte', '0x01', '0xFF'));
['0178','7879','79FF']

Bigramas de puntos de código con relleno en los límites (resultado mostrado en hexadecimal)

SELECT arrayMap(x -> hex(x), naiveBayesNgrams('ab', 2, 'codepoint', '0x10FFFE', '0x10FFFF'));
['F48FBFBE61','6162','62F48FBFBF']

ngrams

Disponible desde: v21.11.0

Divide una cadena UTF-8 en n-gramas de longitud N.

Sintaxis

ngrams(s, N)

Argumentos

Valor devuelto

Devuelve un array de n-gramas. Array(String)

Ejemplos

Ejemplo de uso

SELECT ngrams('ClickHouse', 3);
['Cli','lic','ick','ckH','kHo','Hou','ous','use']

reverseBySeparator

Introducido en: v26.2.0

Invierte el orden de las subcadenas de una cadena separadas por un separador especificado. Esta función divide la cadena por el separador, invierte el orden de las partes resultantes y las vuelve a unir usando el mismo separador. Resulta útil para analizar nombres de dominio, rutas de archivo u otros datos jerárquicos en los que necesites invertir el orden de los componentes.

Ejemplos:

  • reverseBySeparator('www.google.com') devuelve 'com.google.www'
  • reverseBySeparator('a/b/c', '/') devuelve 'c/b/a'
  • reverseBySeparator('x::y::z', '::') devuelve 'z::y::x'

Sintaxis

reverseBySeparator(string[, separator])

Argumentos

  • string — La cadena de entrada cuyo orden de partes se va a invertir. String
  • separator — La cadena separadora que se usa para identificar las partes. Si no se proporciona, se usa '.' (punto). Valor predeterminado: '.' String

Valor devuelto

Devuelve una cadena con las subcadenas de la cadena original ordenadas de derecha a izquierda, unidas por el mismo separador. String

Ejemplos

Inversión básica de dominios

SELECT reverseBySeparator('www.google.com')
com.google.www

Ruta invertida

SELECT reverseBySeparator('a/b/c', '/')
c/b/a

Separador personalizado

SELECT reverseBySeparator('x::y::z', '::')
z::y::x

Caso especial con puntos

SELECT reverseBySeparator('.a.b.', '.')
.b.a.

Un solo elemento

SELECT reverseBySeparator('single')
single

Separador vacío

SELECT reverseBySeparator('abcde', '')
edcba

splitByChar

Introducido en: v1.1.0

Divide una cadena en un Array de subcadenas usando como separador una cadena constante separator de exactamente un carácter. Se pueden obtener subcadenas vacías si el separador aparece al principio o al final de la cadena, o si hay varios separadores consecutivos.

Se pueden obtener subcadenas vacías cuando:

  • Un separador aparece al principio o al final de la cadena
  • Hay varios separadores consecutivos
  • La cadena original s está vacía

Sintaxis

splitByChar(separator, s[, max_substrings])

Argumentos

  • separator — El separador debe ser un carácter de un solo byte. String
  • s — La cadena que se debe dividir. String
  • max_substrings — Opcional. Si max_substrings > 0, el array devuelto contendrá como máximo max_substrings subcadenas; de lo contrario, la función devolverá tantas subcadenas como sea posible. El valor predeterminado es 0. Int64

Valor devuelto

Devuelve un array de las subcadenas seleccionadas. Array(String)

Ejemplos

Ejemplo de uso

SELECT splitByChar(',', '1,2,3,abcde');
┌─splitByChar(',', '1,2,3,abcde')─┐
│ ['1','2','3','abcde']           │
└─────────────────────────────────┘

splitByNonAlpha

Introducido en: v21.9.0

Divide en un array de subcadenas una cadena delimitada por caracteres de espacio en blanco y de puntuación.

Sintaxis

splitByNonAlpha(s[, max_substrings])

Argumentos

  • s — La cadena que se va a dividir. String
  • max_substrings — Opcional. Cuando max_substrings > 0, las subcadenas devueltas no serán más de max_substrings; de lo contrario, la función devolverá tantas subcadenas como sea posible. Valor predeterminado: 0. Int64

Valor devuelto

Devuelve un Array de subcadenas seleccionadas de s. Array(String)

Ejemplos

Ejemplo de uso

SELECT splitByNonAlpha('user@domain.com');
['user','domain','com']

splitByRegexp

Introducido en: v21.6.0

Divide una cadena separada por la expresión regular proporcionada en un array de subcadenas. Si la expresión regular proporcionada está vacía, la cadena se dividirá en un array de caracteres individuales. Si no se encuentra ninguna coincidencia para la expresión regular, la cadena no se dividirá.

Pueden seleccionarse subcadenas vacías cuando:

  • se produce una coincidencia no vacía de la expresión regular al principio o al final de la cadena
  • hay varias coincidencias no vacías consecutivas de la expresión regular
  • la cadena original está vacía mientras que la expresión regular no lo está.

Sintaxis

splitByRegexp(regexp, s[, max_substrings])

Argumentos

  • regexp — Expresión regular. Constante. String o FixedString
  • s — La cadena que se debe dividir. String
  • max_substrings — Opcional. Cuando max_substrings > 0, el número de subcadenas devueltas no será mayor que max_substrings; de lo contrario, la función devolverá tantas subcadenas como sea posible. Valor predeterminado: 0. Int64

Valor devuelto

Devuelve un Array con las subcadenas seleccionadas de s. Array(String)

Ejemplos

Ejemplo de uso

SELECT splitByRegexp('\\d+', 'a12bc23de345f');
┌─splitByRegexp('\\d+', 'a12bc23de345f')─┐
│ ['a','bc','de','f']                    │
└────────────────────────────────────────┘

Expresión regular vacía

SELECT splitByRegexp('', 'abcde');
┌─splitByRegexp('', 'abcde')─┐
│ ['a','b','c','d','e']      │
└────────────────────────────┘

splitByString

Introducido en: v1.1.0

Divide una cadena con un separator constante compuesto por varios caracteres en un array de subcadenas. Si la cadena separator está vacía, dividirá la cadena s en un array de caracteres individuales.

Pueden seleccionarse subcadenas vacías cuando:

  • Un separador no vacío aparece al principio o al final de la cadena
  • Hay varios separadores no vacíos consecutivos
  • La cadena original s está vacía mientras que el separador no lo está

Sintaxis

splitByString(separator, s[, max_substrings])

Argumentos

  • separator — El separador. String
  • s — La cadena que se va a dividir. String
  • max_substrings — Opcional. Cuando max_substrings > 0, el número de subcadenas devueltas no será mayor que max_substrings; de lo contrario, la función devolverá tantas subcadenas como sea posible. Valor predeterminado: 0. Int64

Valor devuelto

Devuelve un array con las subcadenas obtenidas de s Array(String)

Ejemplos

Ejemplo de uso

SELECT splitByString(', ', '1, 2 3, 4,5, abcde');
┌─splitByString(', ', '1, 2 3, 4,5, abcde')─┐
│ ['1','2 3','4,5','abcde']                 │
└───────────────────────────────────────────┘

Separador vacío

SELECT splitByString('', 'abcde');
┌─splitByString('', 'abcde')─┐
│ ['a','b','c','d','e']      │
└────────────────────────────┘

splitByWhitespace

Introducido en: v21.9.0

Divide una cadena separada por caracteres de espacio en blanco en un array de subcadenas.

Sintaxis

splitByWhitespace(s[, max_substrings])

Argumentos

  • s — La cadena que se va a dividir. String
  • max_substrings — Opcional. Cuando max_substrings > 0, las subcadenas devueltas no serán más de max_substrings; de lo contrario, la función devolverá tantas subcadenas como sea posible. Valor predeterminado: 0. Int64

Valor devuelto

Devuelve un array con las subcadenas seleccionadas de s. Array(String)

Ejemplos

Ejemplo de uso

SELECT splitByWhitespace('  1!  a,  b.  ');
['1!','a,','b.']

tokens

Introducido en: v21.11.0

Divide una cadena en tokens usando el tokenizador indicado.

Tokenizadores disponibles:

  • splitByNonAlpha divide cadenas por caracteres ASCII no alfanuméricos (consulte también la función splitByNonAlpha).
  • splitByString(S) divide cadenas usando determinadas cadenas separadoras S definidas por el usuario (consulte también la función splitByString). Los separadores pueden especificarse mediante un parámetro opcional; por ejemplo, tokens(value, 'splitByString', [', ', '; ', '\n', '\\']). Tenga en cuenta que cada cadena puede constar de varios caracteres (', ' en el ejemplo). La lista de separadores predeterminada, si no se especifica explícitamente, es un único espacio en blanco [' '].
  • splitByRegexp(re) divide cadenas usando un separador de expresión regular re definido por el usuario (consulte también la función splitByRegexp). La expresión regular es obligatoria; por ejemplo, tokens(value, 'splitByRegexp', '[^\p{L}\p{N}#+]+'). A diferencia de splitByString, un separador de expresión regular puede conservar tokens que contienen caracteres especiales (como C++ o C#).
  • asciiCJK divide cadenas en tokens usando reglas de límite de palabra de Unicode (similares a UAX #29). Los caracteres ASCII alfanuméricos y los guiones bajos forman tokens con conectores (: para letras, . y ' para caracteres del mismo tipo). Los caracteres Unicode no ASCII pasan a ser tokens de un solo carácter.
  • chinese segmenta texto chino en palabras mediante un diccionario y un modelo oculto de Markov (el algoritmo sigue jieba; los datos del diccionario y del modelo integrados se derivan de cppjieba). A diferencia de asciiCJK, que trata cada carácter no ASCII como un token de un solo carácter, chinese agrupa caracteres chinos consecutivos en palabras, lo que genera tokens más significativos y una mayor calidad de búsqueda para texto chino. Un argumento opcional granularity puede ser coarse_grained (el valor predeterminado) o fine_grained; este último también enumera subpalabras superpuestas, lo que mejora la recuperación a costa de un índice más grande.
  • icu(locale) divide cadenas en tokens de palabras mediante la segmentación de palabras Unicode (UAX #29) de la biblioteca ICU. Para sistemas de escritura sin espacios entre palabras (por ejemplo, chino, japonés y tailandés), ICU aplica una segmentación basada en diccionarios, por lo que el texto se divide en palabras significativas. locale es la configuración regional de ICU que se pasa al segmentador (la segmentación se basa principalmente en el sistema de escritura y los diccionarios; la configuración regional selecciona la adaptación específica de ICU); es obligatoria y se pasa como argumento independiente; por ejemplo, tokens(value, 'icu', 'ja').
  • japanese divide texto japonés en palabras mediante el analizador morfológico MeCab. Requiere un diccionario configurado en la configuración del servidor (consulte la documentación sobre el índice de texto).
  • ngrams(N) divide cadenas en n-gramas de tamaño uniforme N (consulte también la función ngrams). La longitud del n-grama puede especificarse mediante un parámetro entero opcional entre 1 y 8; por ejemplo, tokens(value, 'ngrams', 3). El tamaño predeterminado del n-grama, si no se especifica explícitamente, es 3.
  • sparseGrams(min_length, max_length, min_cutoff_length) divide cadenas en n-gramas de longitud variable de al menos min_length y como máximo max_length caracteres (inclusive) (consulte también la función sparseGrams). A menos que se especifique explícitamente, min_length y max_length toman los valores predeterminados 3 y 100. Si se proporciona el parámetro min_cutoff_length, solo se devuelven n-gramas con una longitud mayor o igual que min_cutoff_length. En comparación con ngrams(N), el tokenizador sparseGrams produce n-gramas de longitud variable, lo que permite una representación más flexible del texto original. Por ejemplo, tokens(value, 'sparseGrams', 3, 5, 4) genera internamente 3-, 4- y 5-gramas a partir de la cadena de entrada, pero solo se devuelven los 4- y 5-gramas.
  • array no realiza tokenización; es decir, cada valor de fila es un token (consulte también la función array). Por compatibilidad con otros sistemas, keyword está disponible como alias de array.

En el caso del tokenizador splitByString, si los tokens no forman un código de prefijo, probablemente querrá que la coincidencia priorice los separadores más largos. Para ello, pase los separadores en orden descendente de longitud. Por ejemplo, con separators = ['%21', '%'], la cadena %21abc se tokenizaría como ['abc'], mientras que con separators = ['%', '%21'] se tokenizaría como ['21ac'] (lo que probablemente no era lo que quería).

Sintaxis

tokens(value) -- 'splitByNonAlpha' tokenizer
tokens(value, 'splitByNonAlpha')
tokens(value, 'splitByString'[, separators])
tokens(value, 'splitByRegexp', regexp)
tokens(value, 'asciiCJK')
tokens(value, 'chinese'[, granularity])
tokens(value, 'icu', locale)
tokens(value, 'japanese')
tokens(value, 'ngrams'[, n])
tokens(value, 'sparseGrams'[, min_length, max_length[, min_cutoff_length]])
tokens(value, 'array')

Argumentos

  • value — La cadena de entrada. String o FixedString
  • tokenizer — El tokenizador que se va a usar. Los argumentos válidos son splitByNonAlpha, splitByString, splitByRegexp, asciiCJK, chinese, icu, japanese, ngrams, sparseGrams y array. Es opcional; si no se establece explícitamente, el valor predeterminado es splitByNonAlpha. const String
  • locale — Solo es relevante si el argumento tokenizer es icu: la configuración regional obligatoria, por ejemplo, 'ja'. const String
  • n — Solo es relevante si el argumento tokenizer es ngrams: un parámetro opcional que define la longitud de los ngrams. Si no se establece explícitamente, el valor predeterminado es 3. const UInt8
  • separators — Solo es relevante si el argumento tokenizer es split: un parámetro opcional que define las cadenas separadoras. Si no se establece explícitamente, el valor predeterminado es [' ']. const Array(String)
  • regexp — Solo es relevante si el argumento tokenizer es splitByRegexp: un parámetro obligatorio que define el separador de expresión regular. const String
  • min_length — Solo es relevante si el argumento tokenizer es sparseGrams: un parámetro opcional que define la longitud mínima de los gramas; el valor predeterminado es 3. const UInt8
  • max_length — Solo es relevante si el argumento tokenizer es sparseGrams: un parámetro opcional que define la longitud máxima de los gramas; el valor predeterminado es 100. const UInt8
  • min_cutoff_length — Solo es relevante si el argumento tokenizer es sparseGrams: un parámetro opcional que define la longitud mínima de corte. const UInt8
  • granularity — Solo es relevante si el argumento tokenizer es chinese: un parámetro opcional, coarse_grained (predeterminado) o fine_grained, que controla la granularidad de la segmentación. const String

Valor devuelto

Devuelve el array de tokens resultante de la cadena de entrada. Array

Ejemplos

Tokenizador predeterminado

SELECT tokens('test1,;\\\\ test2,;\\\\ test3,;\\\\   test4') AS tokens;
['test1','test2','test3','test4']

Tokenizador de ngramas

SELECT tokens('abc def', 'ngrams', 3) AS tokens;
['abc','bc ','c d',' de','def']

tokensForLikePattern

Introducido en: v26.3.0

Divide una cadena de patrón LIKE en tokens mediante el tokenizador especificado.

A diferencia de la función tokens, esta función tiene en cuenta la semántica de los patrones LIKE (como los caracteres comodín al principio y al final) y aplica reglas específicas del tokenizador para extraer tokens significativos para la coincidencia de patrones.

Admite los mismos conjuntos de argumentos que la función tokens, con algunas excepciones: los tokenizadores chinese e icu no son compatibles aquí. La tokenización de patrones LIKE solo es significativa para los tokenizadores que optan explícitamente por la semántica LIKE (supportsStringLike()). Llamar a tokensForLikePattern con un tokenizador no compatible genera BAD_ARGUMENTS; utilice tokens sin más.

Los argumentos adicionales después de tokenizer se interpretan según el tokenizador seleccionado (por ejemplo, n para ngrams, separators para splitByString y min_length / max_length [/ min_cutoff_length] para sparseGrams).

Esta función está pensada principalmente para tareas de depuración y pruebas, y se utiliza internamente para analizar el comportamiento de la tokenización en patrones LIKE.

Sintaxis

tokensForLikePattern(value[, tokenizer[, tokenizer_specific_arguments...]])

Argumentos

  • value — La cadena de entrada. String o FixedString
  • tokenizer — El tokenizador que se utilizará. Los argumentos válidos son splitByNonAlpha, splitByString, asciiCJK, ngrams, sparseGrams y array. Es opcional; si no se establece explícitamente, el valor predeterminado es splitByNonAlpha. const String
  • locale — Solo es relevante si el argumento tokenizer es icu: la configuración regional obligatoria, por ejemplo, 'ja'. const String
  • n — Solo es relevante si el argumento tokenizer es ngrams: un parámetro opcional que define la longitud de los ngrams. Si no se establece explícitamente, el valor predeterminado es 3. const UInt8
  • separators — Solo es relevante si el argumento tokenizer es split: un parámetro opcional que define las cadenas separadoras. Si no se establece explícitamente, el valor predeterminado es [' ']. const Array(String)
  • regexp — Solo es relevante si el argumento tokenizer es splitByRegexp: un parámetro obligatorio que define el separador de expresión regular. const String
  • min_length — Solo es relevante si el argumento tokenizer es sparseGrams: un parámetro opcional que define la longitud mínima del grama; el valor predeterminado es 3. const UInt8
  • max_length — Solo es relevante si el argumento tokenizer es sparseGrams: un parámetro opcional que define la longitud máxima del grama; el valor predeterminado es 100. const UInt8
  • min_cutoff_length — Solo es relevante si el argumento tokenizer es sparseGrams: un parámetro opcional que define la longitud mínima de corte. const UInt8
  • granularity — Solo es relevante si el argumento tokenizer es chinese: un parámetro opcional, ya sea coarse_grained (predeterminado) o fine_grained, que controla la granularidad de la segmentación. const String

Valor devuelto

Devuelve el array de tokens resultante de la cadena de entrada. Array

Ejemplos

Tokenizador predeterminado

SELECT tokensForLikePattern('%test1,test2,test3%') AS tokens;
['test2']
Navigation