alphaTokens
Добавленный в: v1.1.0
Выделяет подстроки из последовательных байтов в диапазонах a-z и A-Z и возвращает массив этих подстрок.
Синтаксис
alphaTokens(s[, max_substrings])Псевдонимы: splitByAlpha
Аргументы
s— Строка, которую нужно разбить.Stringmax_substrings— Необязательно. Еслиmax_substrings > 0, количество возвращаемых подстрок будет не большеmax_substrings, в противном случае функция вернёт максимально возможное число подстрок.Int64
Возвращаемое значение
Возвращает массив полученных подстрок строки s. Array(String)
Примеры
Пример использования
SELECT alphaTokens('abca1abc');┌─alphaTokens('abca1abc')─┐
│ ['abca','abc'] │
└─────────────────────────┘arrayStringConcat
Добавленный в: v1.1.0
Объединяет строковые представления значений, перечисленных в массиве, используя указанный разделитель; это необязательный параметр, который по умолчанию равен пустой строке.
Синтаксис
arrayStringConcat(arr[, separator])Псевдонимы: array_to_string
Аргументы
arr— Массив, элементы которого нужно объединить.Array(T)separator— Необязательный параметр. Строка-разделитель. По умолчанию — пустая строка.const String
Возвращаемое значение
Возвращает конкатенированную строку. String
Примеры
Пример использования
SELECT arrayStringConcat(['12/05/2021', '12:50:00'], ' ') AS DateString;┌─DateString──────────┐
│ 12/05/2021 12:50:00 │
└─────────────────────┘extractAllGroupsVertical
Добавленный в: v20.5.0
Находит все группы в строке с помощью регулярного выражения и возвращает массив массивов, в котором каждый массив содержит совпавшие фрагменты из всех групп, сгруппированные по порядку их появления во входной строке.
Синтаксис
extractAllGroupsVertical(s, regexp)Псевдонимы: extractAllGroups
Аргументы
s— Входная строка, из которой нужно выполнить извлечение.StringилиFixedStringregexp— Регулярное выражение для поиска совпадений.const Stringилиconst FixedString
Возвращаемое значение
Возвращает массив массивов, где каждый внутренний массив содержит группы захвата из одного совпадения. Для каждого совпадения формируется массив с элементами, соответствующими группам захвата в регулярном выражении (группа 1, группа 2 и т. д.). Если совпадений не найдено, возвращается пустой массив. Array(Array(String))
Примеры
Пример использования
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
Добавленный в: v26.7.0
Разбивает текст на n-граммы, используя ту же токенизацию, что и словарь Naive Bayes (структура NAIVE_BAYES): режим byte, codepoint или token, с необязательным дополнением границ. Используйте эту функцию, чтобы построить предагрегированные обучающие данные (ngram, class_id, count), которые использует такой словарь, — так обучающие n-граммы будут в точности совпадать с тем, что naiveBayesClassifier создаёт при выполнении запроса.
Синтаксис
naiveBayesNgrams(text, n, mode[, start_token, end_token])Аргументы
text— Текст для разбиения на n-граммы.Stringn— Размер n-граммы, от 1 до 1024.const UIntmode— Режим токенизации: 'byte', 'codepoint' или 'token'.const Stringstart_token— Необязательно. Граничный токен, добавляемый в начало входного текста (n-1) раз; число для 'byte'/'codepoint', литерал для 'token'. Пустое значение означает отсутствие дополнения.const Stringend_token— Необязательно. Граничный токен, добавляемый в конец входного текста (n-1) раз.const String
Возвращаемое значение
N-граммы входного текста. Array(String)
Примеры
Биграммы токенов
SELECT naiveBayesNgrams('the cat sat', 2, 'token');['the cat','cat sat']Биграммы токенов с дополнением на границах
SELECT naiveBayesNgrams('cat', 2, 'token', '<s>', '</s>');['<s> cat','cat </s>']Байтовые биграммы с дополнением по краям (результат показан в шестнадцатеричном виде)
SELECT arrayMap(x -> hex(x), naiveBayesNgrams('xy', 2, 'byte', '0x01', '0xFF'));['0178','7879','79FF']Биграммы кодовых точек с дополнением по краям (результат показан в шестнадцатеричном виде)
SELECT arrayMap(x -> hex(x), naiveBayesNgrams('ab', 2, 'codepoint', '0x10FFFE', '0x10FFFF'));['F48FBFBE61','6162','62F48FBFBF']ngrams
Добавленный в: v21.11.0
Разбивает строку в кодировке UTF-8 на n-граммы длиной N.
Синтаксис
ngrams(s, N)Аргументы
s— Входная строка.StringилиFixedStringN— Длина n-граммы.const UInt8/16/32/64
Возвращаемое значение
Возвращает массив n-грамм. Array(String)
Примеры
Пример использования
SELECT ngrams('ClickHouse', 3);['Cli','lic','ick','ckH','kHo','Hou','ous','use']reverseBySeparator
Добавленный в: v26.2.0
Меняет порядок подстрок в строке, разделённых указанным разделителем, на обратный. Эта функция разбивает строку по разделителю, обращает порядок получившихся частей и снова объединяет их с помощью того же разделителя. Это полезно при разборе доменных имён, путей к файлам и других иерархических данных, когда нужно обратить порядок компонентов.
Примеры:
- reverseBySeparator('www.google.com') returns 'com.google.www'
- reverseBySeparator('a/b/c', '/') returns 'c/b/a'
- reverseBySeparator('x::y::z', '::') returns 'z::y::x'
Синтаксис
reverseBySeparator(string[, separator])Аргументы
string— Входная строка, порядок частей которой нужно обратить.Stringseparator— Строка-разделитель, используемая для выделения частей. Если не указана, используется '.' (точка). По умолчанию: '.'String
Возвращаемое значение
Возвращает строку с подстроками, расположенными в порядке справа налево относительно исходной строки и соединёнными тем же разделителем. String
Примеры
Базовое реверсирование домена
SELECT reverseBySeparator('www.google.com')com.google.wwwИнвертирование пути
SELECT reverseBySeparator('a/b/c', '/')c/b/aПроизвольный разделитель
SELECT reverseBySeparator('x::y::z', '::')z::y::xОсобый случай с точками
SELECT reverseBySeparator('.a.b.', '.').b.a.Один элемент
SELECT reverseBySeparator('single')singleПустой разделитель
SELECT reverseBySeparator('abcde', '')edcbasplitByChar
Добавленный в: v1.1.0
Разбивает строку по указанному постоянному разделителю separator, представляющему собой строку длиной ровно в один символ, на массив подстрок.
Пустые подстроки могут появляться, если разделитель находится в начале или в конце строки, либо если подряд встречается несколько разделителей.
Пустые подстроки могут появляться в следующих случаях:
- Разделитель находится в начале или в конце строки
- Подряд встречается несколько разделителей
- Исходная строка
sпуста
Синтаксис
splitByChar(separator, s[, max_substrings])Аргументы
separator— Разделитель должен быть однобайтовым символом.Strings— Строка, которую нужно разделить.Stringmax_substrings— Необязательно. Еслиmax_substrings > 0, возвращаемый массив будет содержать не болееmax_substringsподстрок; в противном случае функция вернет максимально возможное количество подстрок. Значение по умолчанию —0.Int64
Возвращаемое значение
Возвращает массив подстрок. Array(String)
Примеры
Пример использования
SELECT splitByChar(',', '1,2,3,abcde');┌─splitByChar(',', '1,2,3,abcde')─┐
│ ['1','2','3','abcde'] │
└─────────────────────────────────┘splitByNonAlpha
Добавленный в: v21.9.0
Разбивает строку по пробельным символам и знакам пунктуации на массив подстрок.
Синтаксис
splitByNonAlpha(s[, max_substrings])Аргументы
s— Строка, которую нужно разделить.Stringmax_substrings— Необязательно. Еслиmax_substrings > 0, число возвращаемых подстрок не превыситmax_substrings, в противном случае функция вернет максимально возможное количество подстрок. Значение по умолчанию:0.Int64
Возвращаемое значение
Возвращает массив подстрок, полученных из s. Array(String)
Примеры
Пример использования
SELECT splitByNonAlpha('user@domain.com');['user','domain','com']splitByRegexp
Добавленный в: v21.6.0
Разбивает строку по заданному регулярному выражению на массив подстрок. Если заданное регулярное выражение пустое, строка будет разбита на массив отдельных символов. Если для регулярного выражения не найдено ни одного совпадения, строка не будет разбита.
Пустые подстроки могут появляться в следующих случаях:
- совпадение непустого регулярного выражения находится в начале или в конце строки
- есть несколько последовательных совпадений непустого регулярного выражения
- исходная строка пуста, а регулярное выражение не пусто.
Синтаксис
splitByRegexp(regexp, s[, max_substrings])Аргументы
regexp— Регулярное выражение. Константа.StringилиFixedStrings— Строка, которую нужно разделить.Stringmax_substrings— Необязательно. Еслиmax_substrings > 0, количество возвращаемых подстрок не будет превышатьmax_substrings, в противном случае функция вернёт столько подстрок, сколько возможно. Значение по умолчанию:0.Int64
Возвращаемое значение
Возвращает массив полученных подстрок строки s. Array(String)
Примеры
Пример использования
SELECT splitByRegexp('\\d+', 'a12bc23de345f');┌─splitByRegexp('\\d+', 'a12bc23de345f')─┐
│ ['a','bc','de','f'] │
└────────────────────────────────────────┘Пустое регулярное выражение
SELECT splitByRegexp('', 'abcde');┌─splitByRegexp('', 'abcde')─┐
│ ['a','b','c','d','e'] │
└────────────────────────────┘splitByString
Добавленный в: v1.1.0
Разбивает строку на массив подстрок, используя в качестве постоянного separator последовательность из нескольких символов.
Если строка separator пуста, строка s разбивается на массив отдельных символов.
Пустые подстроки могут появляться в следующих случаях:
- Непустой разделитель находится в начале или в конце строки
- Идут подряд несколько непустых разделителей
- Исходная строка
sпуста, а разделитель непустой
Синтаксис
splitByString(separator, s[, max_substrings])Аргументы
separator— Разделитель.Strings— Строка, которую нужно разделить.Stringmax_substrings— Необязательный параметр. Еслиmax_substrings > 0, число возвращаемых подстрок не будет превышатьmax_substrings; в противном случае функция вернёт максимально возможное число подстрок. Значение по умолчанию:0.Int64
Возвращаемое значение
Возвращает массив выбранных подстрок строки s Array(String)
Примеры
Пример использования
SELECT splitByString(', ', '1, 2 3, 4,5, abcde');┌─splitByString(', ', '1, 2 3, 4,5, abcde')─┐
│ ['1','2 3','4,5','abcde'] │
└───────────────────────────────────────────┘Пустой разделитель
SELECT splitByString('', 'abcde');┌─splitByString('', 'abcde')─┐
│ ['a','b','c','d','e'] │
└────────────────────────────┘splitByWhitespace
Добавленный в: v21.9.0
Разбивает строку, разделённую пробельными символами, на массив подстрок.
Синтаксис
splitByWhitespace(s[, max_substrings])Аргументы
s— Строка, которую нужно разделить.Stringmax_substrings— Необязательно. Еслиmax_substrings > 0, количество возвращаемых подстрок не будет превышатьmax_substrings, в противном случае функция вернет максимально возможное количество подстрок. Значение по умолчанию:0.Int64
Возвращаемое значение
Возвращает массив полученных подстрок строки s. Array(String)
Примеры
Пример использования
SELECT splitByWhitespace(' 1! a, b. ');['1!','a,','b.']tokens
Добавленный в: v21.11.0
Разбивает строку на токены с помощью указанного токенизатора.
Доступные токенизаторы:
splitByNonAlphaразбивает строки по неалфавитно-цифровым ASCII-символам (см. также функцию splitByNonAlpha).splitByString(S)разбивает строки по заданным пользователем строкам-разделителямS(см. также функцию splitByString). Разделители можно указать с помощью необязательного параметра, например,tokens(value, 'splitByString', [', ', '; ', '\n', '\\']). Обратите внимание, что каждая строка может состоять из нескольких символов (', 'в примере). Если список разделителей явно не задан, по умолчанию используется один пробельный символ[' '].splitByRegexp(re)разбивает строки по заданному пользователем регулярному выражению-разделителюre(см. также функцию splitByRegexp). Регулярное выражение обязательно, например,tokens(value, 'splitByRegexp', '[^\p{L}\p{N}#+]+'). В отличие отsplitByString, разделитель в виде регулярного выражения позволяет сохранять токены, содержащие специальные символы (такие какC++илиC#).asciiCJKразбивает строки на токены, используя правила границ слов Unicode (аналогично UAX #29). ASCII-буквенно-цифровые символы и символы подчёркивания образуют токены с соединителями (:для букв,.и'для символов одного типа). Символы Unicode вне ASCII становятся односимвольными токенами.chineseсегментирует китайский текст на слова с помощью словаря и скрытой марковской модели (алгоритм основан на jieba; встроенные данные словаря и модели взяты из cppjieba). В отличие отasciiCJK, который рассматривает каждый символ вне ASCII как односимвольный токен,chineseгруппирует последовательные китайские символы в слова, что даёт более содержательные токены и повышает качество поиска по китайскому тексту. Необязательный аргументgranularityпринимает значениеcoarse_grained(по умолчанию) илиfine_grained; последнее дополнительно перечисляет перекрывающиеся подслова, повышая полноту поиска за счёт увеличения индекса.icu(locale)разбивает строки на токены-слова с помощью сегментации слов Unicode (UAX #29) из библиотеки ICU. Для письменностей без пробелов между словами (например, китайской, японской и тайской) ICU применяет сегментацию на основе словаря, поэтому такой текст разбивается на значимые слова.locale— это локаль ICU, передаваемая сегментатору (сегментация в основном определяется письменностью и словарём; локаль выбирает специфичные для локали настройки ICU); этот параметр обязателен и передаётся как отдельный аргумент, напримерtokens(value, 'icu', 'ja').japaneseразбивает японский текст на слова с помощью морфологического анализатора MeCab. Требует словаря, настроенного в конфигурации сервера (см. документацию по текстовому индексу).ngrams(N)разбивает строки наN-граммы одинаковой длины (см. также функцию ngrams). Длину n-граммы можно указать с помощью необязательного целочисленного параметра от 1 до 8, например,tokens(value, 'ngrams', 3). Если размер n-граммы явно не задан, по умолчанию используется 3.sparseGrams(min_length, max_length, min_cutoff_length)разбивает строки на n-граммы переменной длины: не менееmin_lengthи не болееmax_lengthсимволов включительно (см. также функцию sparseGrams). Если не указано иное, значенияmin_lengthиmax_lengthпо умолчанию равны 3 и 100. Если передан параметрmin_cutoff_length, возвращаются только n-граммы длиной не меньшеmin_cutoff_length. По сравнению сngrams(N), токенизаторsparseGramsсоздаёт N-граммы переменной длины, что позволяет гибче представлять исходный текст. Например,tokens(value, 'sparseGrams', 3, 5, 4)внутренне генерирует из входной строки 3-, 4- и 5-граммы, но возвращаются только 4- и 5-граммы.arrayне выполняет токенизацию, то есть каждое значение в строке является токеном (см. также функцию array). Для совместимости с другими системамиkeywordдоступен как псевдонимarray.
Если при использовании токенизатора splitByString токены не образуют префиксный код, вероятно, следует отдавать предпочтение более длинным разделителям при сопоставлении.
Для этого передавайте разделители в порядке убывания длины.
Например, при separators = ['%21', '%'] строка %21abc будет токенизирована как ['abc'], тогда как при separators = ['%', '%21'] результатом токенизации будет ['21ac'] (что, вероятно, не соответствует ожидаемому результату).
Синтаксис
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')Аргументы
value— Входная строка.StringилиFixedStringtokenizer— Используемый токенизатор. Допустимые аргументы:splitByNonAlpha,splitByString,splitByRegexp,asciiCJK,chinese,icu,japanese,ngrams,sparseGramsиarray. Необязательный параметр; если явно не задан, по умолчанию используетсяsplitByNonAlpha.const Stringlocale— Имеет значение только в том случае, если аргументtokenizerравенicu: обязательная локаль, например'ja'.const Stringn— Имеет значение только в том случае, если аргументtokenizerравенngrams: необязательный параметр, определяющий длину n-грамм. Если явно не задан, по умолчанию используется3.const UInt8separators— Имеет значение только в том случае, если аргументtokenizerравенsplit: необязательный параметр, определяющий строки-разделители. Если явно не задан, по умолчанию используется[' '].const Array(String)regexp— Имеет значение только в том случае, если аргументtokenizerравенsplitByRegexp: обязательный параметр, определяющий разделитель в виде регулярного выражения.const Stringmin_length— Имеет значение только в том случае, если аргументtokenizerравенsparseGrams: необязательный параметр, определяющий минимальную длину граммы; значение по умолчанию — 3.const UInt8max_length— Имеет значение только в том случае, если аргументtokenizerравенsparseGrams: необязательный параметр, определяющий максимальную длину граммы; значение по умолчанию — 100.const UInt8min_cutoff_length— Имеет значение только в том случае, если аргументtokenizerравенsparseGrams: необязательный параметр, определяющий минимальную длину отсечения.const UInt8granularity— Имеет значение только в том случае, если аргументtokenizerравенchinese: необязательный параметр —coarse_grained(по умолчанию) илиfine_grained, — управляющий детализацией сегментации.const String
Возвращаемое значение
Возвращает массив токенов, полученный из входной строки. Array
Примеры
Токенизатор по умолчанию
SELECT tokens('test1,;\\\\ test2,;\\\\ test3,;\\\\ test4') AS tokens;['test1','test2','test3','test4']Токенизатор n-грамм
SELECT tokens('abc def', 'ngrams', 3) AS tokens;['abc','bc ','c d',' de','def']tokensForLikePattern
Добавленный в: v26.3.0
Разбивает строку шаблона LIKE на токены с помощью указанного токенизатора.
В отличие от функции tokens, эта функция учитывает семантику шаблонов LIKE
(например, подстановочные символы в начале и в конце) и применяет правила,
специфичные для токенизатора, чтобы выделять значимые токены для сопоставления с шаблоном.
Она поддерживает те же наборы аргументов, что и функция tokens, но с некоторыми
исключениями: токенизаторы chinese и icu здесь не поддерживаются.
Токенизация шаблонов LIKE имеет смысл только для токенизаторов, которые
явно поддерживают семантику LIKE (supportsStringLike()). Вызов
tokensForLikePattern с неподдерживаемым токенизатором генерирует исключение BAD_ARGUMENTS;
вместо этого используйте обычную функцию tokens.
Дополнительные аргументы после tokenizer интерпретируются в соответствии с выбранным
токенизатором (например, n для ngrams, separators для
splitByString и min_length / max_length [/ min_cutoff_length]
для sparseGrams).
Эта функция в первую очередь предназначена для отладки и тестирования и используется внутри системы для анализа поведения токенизации шаблонов LIKE.
Синтаксис
tokensForLikePattern(value[, tokenizer[, tokenizer_specific_arguments...]])Аргументы
value— Входная строка.StringилиFixedStringtokenizer— Используемый токенизатор. Допустимые аргументы:splitByNonAlpha,splitByString,asciiCJK,ngrams,sparseGramsиarray. Необязательный параметр; если он не задан явно, по умолчанию используетсяsplitByNonAlpha.const Stringlocale— Актуально только для аргументаtokenizerсо значениемicu: обязательная локаль, например'ja'.const Stringn— Актуально только для аргументаtokenizerсо значениемngrams: необязательный параметр, определяющий длину n-грамм. Если он не задан явно, по умолчанию используется3.const UInt8separators— Актуально только для аргументаtokenizerсо значениемsplit: необязательный параметр, определяющий строки-разделители. Если он не задан явно, по умолчанию используется[' '].const Array(String)regexp— Актуально только для аргументаtokenizerсо значениемsplitByRegexp: обязательный параметр, определяющий разделитель в виде регулярного выражения.const Stringmin_length— Актуально только для аргументаtokenizerсо значениемsparseGrams: необязательный параметр, определяющий минимальную длину граммы; по умолчанию — 3.const UInt8max_length— Актуально только для аргументаtokenizerсо значениемsparseGrams: необязательный параметр, определяющий максимальную длину граммы; по умолчанию — 100.const UInt8min_cutoff_length— Актуально только для аргументаtokenizerсо значениемsparseGrams: необязательный параметр, определяющий минимальную длину отсечения.const UInt8granularity— Актуально только для аргументаtokenizerсо значениемchinese: необязательный параметр со значениемcoarse_grained(по умолчанию) илиfine_grained, определяющий детализацию сегментации.const String
Возвращаемое значение
Возвращает массив токенов, полученный из входной строки. Array
Примеры
Токенизатор по умолчанию
SELECT tokensForLikePattern('%test1,test2,test3%') AS tokens;['test2']