Функции для работы с URL-адресами
Обзор
Функции, упомянутые в этом разделе, оптимизированы для максимальной производительности и в большинстве случаев не следуют стандарту RFC-3986.
Функции, реализующие RFC-3986, имеют суффикс RFC в имени функции и, как правило, работают медленнее.
Как правило, можно использовать варианты функций без суффикса RFC при работе с публично зарегистрированными доменами, которые не содержат пользовательских данных и символов @.
В таблице ниже показано, какие символы в URL могут (✔) или не могут (✗) быть разобраны соответствующими вариантами RFC и non-RFC:
| Symbol | non-RFC | RFC | |
|---|---|---|---|
| ' ' | ✗ | ✗ | |
| \t | ✗ | ✗ | |
| < | ✗ | ✗ | |
| > | ✗ | ✗ | |
| % | ✗ | ✔* | |
| { | ✗ | ✗ | |
| } | ✗ | ✗ | |
| ✗ | ✗ | ||
| \ | ✗ | ✗ | |
| ^ | ✗ | ✗ | |
| ~ | ✗ | ✔* | |
| [ | ✗ | ✗ | |
| ] | ✗ | ✔ | |
| ; | ✗ | ✔* | |
| = | ✗ | ✔* | |
| & | ✗ | ✔* |
Символы, помеченные *, являются субделимитерами в RFC 3986 и допускаются для пользовательской информации, следующей за символом @.
Существует два типа функций для работы с URL:
- Функции, извлекающие части URL. Если соответствующая часть отсутствует в URL, возвращается пустая строка.
- Функции, удаляющие часть URL. Если соответствующая часть в URL отсутствует, URL остаётся неизменным.
Приведённые ниже функции генерируются из системной таблицы system.functions.
URLHierarchy
Добавлено в: v1.1
Возвращает массив, содержащий URL, усечённый в конце по символам /, ? и # в пути и строке запроса. Последовательные символы-разделители считаются за один. Результат включает протокол и хост в качестве первого элемента, а последующие элементы — всё более длинные пути, образующие иерархию.
Синтаксис
Аргументы
url— URL для обработки.String
Возвращаемое значение
Возвращает массив URL всё большей длины, образующих иерархию. Array(String)
Примеры
Базовое использование
URLPathHierarchy
Добавлена в: v1.1
Возвращает массив, содержащий компонент пути URL-адреса, усечённый по символам /, ? и # в конце. В отличие от URLHierarchy, результат не включает протокол и хост — он начинается с пути. Идущие подряд разделители считаются одним.
Синтаксис
Аргументы
url— URL для обработки.String
Возвращаемое значение
Возвращает массив всё более длинных компонентов пути URL-адреса, формирующих иерархию. Array(String)
Примеры
Базовое использование
cutFragment
Добавлена в версии: v1.1
Удаляет идентификатор фрагмента, включая знак решётки (#), из URL-адреса.
Синтаксис
Аргументы
url— URL.String
Возвращаемое значение
Возвращает URL без идентификатора фрагмента. String
Примеры
Пример использования
cutQueryString
Введена в: v1.1
Удаляет строку запроса, включая вопросительный знак, из URL-адреса.
Синтаксис
Аргументы
url— URL.String
Возвращаемое значение
Возвращает URL без строки параметров запроса. String
Примеры
Пример использования
cutQueryStringAndFragment
Появилась в версии v1.1
Удаляет строку запроса и идентификатор фрагмента, включая вопросительный знак и символ решётки, из URL.
Синтаксис
Аргументы
url— URL-адрес.String
Возвращаемое значение
Возвращает URL-адрес с удалёнными строкой запроса и идентификатором фрагмента. String
Примеры
Пример использования
cutToFirstSignificantSubdomain
Добавлена в: v1.1
Возвращает часть доменного имени, включающую домен верхнего уровня и субдомены вплоть до первого значимого субдомена.
Синтаксис
Аргументы
url— URL или строка домена для обработки.String
Возвращаемое значение
Возвращает часть домена, которая включает верхние поддомены до первого значимого поддомена, если это возможно, иначе возвращает пустую строку. String
Примеры
Пример использования
cutToFirstSignificantSubdomainCustom
Впервые появилась в: v21.1
Возвращает часть доменного имени, включающую домены верхнего уровня вплоть до первого значимого поддомена. Принимает имя пользовательского списка TLD. Эта функция может быть полезна, если вам нужен обновлённый список TLD или у вас есть собственный список.
Пример конфигурации
Синтаксис
Аргументы
url— URL или строка с доменным именем для обработки.Stringtld_list_name— имя пользовательского списка TLD, настроенного в ClickHouse.const String
Возвращаемое значение
Возвращает часть доменного имени, которая включает верхнеуровневые поддомены вплоть до первого значимого поддомена. String
Примеры
Использование пользовательского списка TLD для нестандартных доменных имён
cutToFirstSignificantSubdomainCustomRFC
Добавлена в версии: v22.10
Возвращает часть домена, включающую домены верхнего уровня до первого значимого поддомена. Принимает наименование пользовательского списка доменов верхнего уровня (TLD): TLD list. Эта функция может быть полезна, если вам нужен свежий список TLD или если у вас есть собственный список. Аналогична cutToFirstSignificantSubdomainCustom, но соответствует RFC 3986.
Пример конфигурации
Синтаксис
Аргументы
url— URL или строка домена для обработки в соответствии с RFC 3986.tld_list_name— имя пользовательского списка TLD, настроенного в ClickHouse.
Возвращаемое значение
Возвращает часть доменного имени, которая включает поддомены верхнего уровня до первого значимого поддомена. String
Примеры
Пример использования
cutToFirstSignificantSubdomainCustomWithWWW
Появилась в версии: v21.1
Возвращает часть доменного имени, включающую домены верхнего уровня до первого значимого поддомена, при этом префикс 'www' не удаляется. Принимает имя пользовательского списка TLD. Может быть полезно, если вам нужен актуальный список TLD или у вас есть собственный список.
Пример конфигурации
Аргументы
url— URL или строка с доменом для обработки. -tld_list_name— имя пользовательского списка TLD, настроенного в ClickHouse.
Возвращаемое значение
Часть доменного имени, включающая поддомены верхнего уровня вплоть до первого значимого поддомена, без удаления 'www'. String
Примеры
Пример использования
cutToFirstSignificantSubdomainCustomWithWWWRFC
Добавлена в версии: v22.10
Возвращает часть домена, которая включает верхнеуровневые субдомены до первого значимого субдомена, не удаляя www.
Принимает имя пользовательского списка TLD.
Это может быть полезно, если вам нужен обновлённый список TLD или у вас есть собственный список.
Похожа на cutToFirstSignificantSubdomainCustomWithWWW, но соответствует RFC 3986.
Пример конфигурации
Аргументы
url— URL или строка доменного имени для обработки в соответствии с RFC 3986. -tld_list_name— имя пользовательского списка доменов верхнего уровня (TLD), настроенного в ClickHouse.
Возвращаемое значение
Возвращает часть имени домена, которая включает домены верхнего уровня и поддомены вплоть до первого значимого поддомена, при этом www не удаляется. String
Примеры
Разбор по RFC 3986 с сохранением www и пользовательским списком TLD
cutToFirstSignificantSubdomainRFC
Добавлена в: v22.10
Возвращает часть доменного имени, которая включает поддомены верхнего уровня до «первого значимого поддомена». Аналогична cutToFirstSignificantSubdomain, но соответствует RFC 3986.
Синтаксис
Аргументы
url— URL или строка с доменом для обработки в соответствии с RFC 3986.String
Возвращаемое значение
Возвращает часть домена, которая включает поддомены верхнего уровня до первого значимого поддомена, если это возможно, в противном случае возвращает пустую строку. String
Примеры
Пример использования
cutToFirstSignificantSubdomainWithWWW
Добавлена в версии: v20.12
Возвращает часть доменного имени, включающую домен верхнего уровня и поддомены до «первого значимого поддомена», при этом префикс 'www.' не удаляется.
Аналогично cutToFirstSignificantSubdomain, но сохраняет префикс 'www.', если он присутствует.
Синтаксис
Аргументы
url— URL или строка с доменным именем для обработки.String
Возвращаемое значение
Возвращает часть домена, которая включает поддомены верхнего уровня вплоть до первого значимого поддомена (включая www), если это возможно, в противном случае — пустую строку. String
Примеры
Пример использования
cutToFirstSignificantSubdomainWithWWWRFC
Появилась в: v22.10
Возвращает часть доменного имени, включающую поддомены верхнего уровня вплоть до «первого значимого поддомена», без удаления www. Аналогична cutToFirstSignificantSubdomainWithWWW, но соответствует RFC 3986.
Синтаксис
Аргументы
url— строка с URL-адресом или доменным именем для обработки в соответствии с RFC 3986.
Возвращаемое значение
Возвращает часть домена, которая включает верхние поддомены до первого значимого поддомена (с «www», если возможно), в противном случае возвращает пустую строку String.
Примеры
Пример использования
cutURLParameter
Впервые появилась в версии: v1.1
Удаляет параметр name из URL, если он присутствует.
Эта функция не кодирует и не декодирует символы в именах параметров, например, Client ID и Client%20ID рассматриваются как разные имена параметров.
Синтаксис
Аргументы
url— URL.Stringname— Имя параметра URL.StringилиArray(String)
Возвращаемое значение
URL, из которого удалён параметр name. String
Примеры
Пример использования
cutWWW
Добавлен в версии v1.1
Удаляет начальное www. из доменного имени URL-адреса, если оно присутствует.
Синтаксис
Аргументы
url— URL.String
Возвращаемое значение
Возвращает URL с удалённым начальным www. в домене. String
Примеры
Пример использования
decodeURLComponent
Добавлено в версии v1.1
Принимает URL-кодированную строку на вход и декодирует её в исходное, человекочитаемое представление.
Синтаксис
Аргументы
url— URL.String
Возвращаемое значение
Возвращает декодированный URL. String
Примеры
Пример использования
decodeURLFormComponent
Впервые добавлена в v1.1
Декодирует URL-кодированные строки по правилам кодирования веб-форм (RFC-1866), при которых знаки + преобразуются в пробелы, а процент-кодированные символы декодируются.
Синтаксис
Аргументы
url— URL-адрес.String
Возвращаемое значение
Возвращает декодированный URL-адрес. String
Примеры
Пример использования
domain
Добавлена в версии v1.1
Извлекает имя хоста из URL-адреса.
URL-адрес может быть указан с протоколом или без него.
Синтаксис
Аргументы
url— URL.String
Возвращаемое значение
Возвращает имя хоста, если входная строка может быть интерпретирована как URL, в противном случае — пустую строку. String
Примеры
Пример использования
domainRFC
Введена в версии v22.10
Извлекает имя хоста из URL.
Аналогична функции domain, но соответствует RFC 3986.
Синтаксис
Аргументы
url— URL.String
Возвращаемое значение
Возвращает имя хоста, если входную строку удаётся интерпретировать как URL, в противном случае — пустую строку. String
Примеры
Пример использования
domainWithoutWWW
Появилась в версии: v1.1
Возвращает домен URL-адреса без ведущего www., если он присутствует.
Синтаксис
Аргументы
url— URL-адрес.String
Возвращаемое значение
Возвращает имя домена, если входная строка может быть интерпретирована как URL-адрес (без ведущего www.), в противном случае — пустую строку. String
Примеры
Пример использования
domainWithoutWWWRFC
Добавлена в: v1.1
Возвращает домен без начального www., если оно присутствует. Аналогична domainWithoutWWW, но соответствует RFC 3986.
Синтаксис
Аргументы
url— URL.String
Возвращаемое значение
Возвращает имя домена, если входную строку можно интерпретировать как URL (без начального www.), в противном случае — пустую строку. String
Примеры
Пример использования
encodeURLComponent
Введена в версии: v22.3
Принимает обычную строку и преобразует её в URL-кодированный формат (percent-encoding), в котором специальные символы заменяются их процентно-кодированными эквивалентами.
Синтаксис
Аргументы
url— URL.String
Возвращаемое значение
Возвращает закодированный URL. String
Примеры
Пример использования
encodeURLFormComponent
Добавлена в: v22.3
Кодирует строки по правилам кодирования данных HTML-форм (RFC-1866), при которых пробелы заменяются на символ «+», а специальные символы кодируются с использованием процентного кодирования.
Синтаксис
Аргументы
url— URL-адрес.String
Возвращаемое значение
Возвращает закодированный URL-адрес. String
Примеры
Пример использования
extractURLParameter
Введена в версии: v1.1
Возвращает значение параметра name в URL, если он присутствует; в противном случае возвращается пустая строка.
Если существует несколько параметров с этим именем, возвращается первое вхождение.
Функция предполагает, что значение параметра в аргументе url закодировано тем же способом, что и аргумент name.
Синтаксис
Аргументы
Возвращаемое значение
Возвращает значение параметра URL с указанным именем. String
Примеры
Пример использования
extractURLParameterNames
Появилась в версии: v1.1
Возвращает массив строк, содержащий имена параметров URL. Значения не декодируются.
Синтаксис
Аргументы
url— URL.String
Возвращаемое значение
Возвращает массив строк — имён параметров URL. Array(String)
Примеры
Пример использования
extractURLParameters
Появилась в версии: v1.1
Возвращает массив строк вида name=value, соответствующих URL-параметрам.
Значения не декодируются.
Синтаксис
Аргументы
url— URL.String
Возвращаемое значение
Возвращает массив строк формата name=value, соответствующих параметрам URL. Array(String)
Примеры
Пример использования
firstSignificantSubdomain
Появилась в версии: v1.1
Возвращает «первый значимый поддомен».
Первым значимым поддоменом является домен второго уровня, если это 'com', 'net', 'org' или 'co'. В противном случае это домен третьего уровня.
Например, firstSignificantSubdomain('https://news.clickhouse.com/') = 'clickhouse', firstSignificantSubdomain ('https://news.clickhouse.com.tr/') = 'clickhouse'.
Список «незначительных» доменов второго уровня и другие детали реализации могут измениться в будущем.
Синтаксис
Аргументы
- Отсутствуют.
Возвращаемое значение
Примеры
firstSignificantSubdomain
firstSignificantSubdomainCustom
Введена в версии v21.1
Возвращает первый значимый поддомен URL на основе пользовательского списка TLD (Top-Level Domain). Имя пользовательского списка TLD соответствует конфигурации, которая определяет, какие суффиксы доменов следует считать доменами верхнего уровня. Это полезно для нестандартных иерархий доменов верхнего уровня. Функция использует упрощённый алгоритм разбора URL, который предполагает, что протокол и всё следующее за ним уже удалены.
Синтаксис
Аргументы
url— URL-адрес, из которого нужно извлечь поддомен.Stringtld_list_name— имя настраиваемого списка TLD из конфигурации.String
Возвращаемое значение
Возвращает первый значимый поддомен. String
Примеры
Базовое использование
firstSignificantSubdomainCustomRFC
Добавлена в версии v22.10
Похожа на firstSignificantSubdomainCustom, но использует разбор URL в соответствии с RFC 3986 вместо упрощённого алгоритма.
Синтаксис
Аргументы
url— URL-адрес, из которого извлекается поддомен.Stringtld_list_name— имя пользовательского списка TLD из конфигурации.String
Возвращаемое значение
Возвращает первый значимый поддомен. String
Примеры
Базовое использование
firstSignificantSubdomainRFC
Введена в версии: v22.10
Возвращает «первый значимый поддомен» в соответствии с RFC 1034.
Синтаксис
Аргументы
- Нет.
Возвращаемое значение
Примеры
fragment
Добавлено в версии v1.1
Возвращает идентификатор фрагмента без начального символа #.
Синтаксис
Аргументы
url— URL.String
Возвращаемое значение
Возвращает идентификатор фрагмента без начального символа #. String
Примеры
Пример использования
netloc
Добавлено в: v20.5
Извлекает сетевую часть (username:password@host:port) из URL.
Синтаксис
Аргументы
url— URL.String
Возвращаемое значение
Возвращает username:password@host:port из указанного URL. String
Примеры
Пример использования
path
Введено в версии: v1.1
Возвращает путь URL-адреса без строки запроса.
Синтаксис
Аргументы
url— URL.String
Возвращаемое значение
Возвращает путь URL-адреса без строки запроса. String
Примеры
Пример использования
pathFull
Добавлена в версии: v1.1
То же, что и path, но включает строку запроса и фрагмент URL-адреса.
Синтаксис
Аргументы
url— URL.String
Возвращаемое значение
Возвращает путь URL-адреса, включая строку запроса и фрагмент. String
Примеры
Пример использования
port
Введена в версии: v20.5
Возвращает порт URL-адреса или default_port, если в URL-адресе порт не указан или URL-адрес не удаётся разобрать.
Синтаксис
Аргументы
url— URL.Stringdefault_port— Необязательный параметр. Номер порта по умолчанию, который будет возвращён. По умолчанию0.UInt16
Возвращаемое значение
Возвращает порт URL или порт по умолчанию, если порт не указан в URL либо в случае ошибки валидации. UInt16
Примеры
Пример использования
portRFC
Введена в версии v22.10
Возвращает порт или default_port, если URL не содержит порта или не может быть разобран.
Аналогична port, но соответствует RFC 3986.
Синтаксис
Аргументы
url— URL.Stringdefault_port— необязательный параметр. Номер порта, возвращаемый по умолчанию. По умолчанию —0.UInt16
Возвращаемое значение
Возвращает порт или порт по умолчанию, если в URL не указан порт или в случае ошибки валидации. UInt16
Примеры
Пример использования
protocol
Добавлено в версии: v1.1
Извлекает протокол из URL.
Примеры типичных значений, возвращаемых функцией: http, https, ftp, mailto, tel, magnet.
Синтаксис
Аргументы
url— URL.String
Возвращаемое значение
Возвращает протокол URL-адреса или пустую строку, если его не удаётся определить. String
Примеры
Пример использования
queryString
Добавлено в: v1.1
Возвращает строку запроса URL без начального знака вопроса, # и всего, что следует после #.
Синтаксис
Аргументы
url— URL-адрес.String
Возвращаемое значение
Возвращает строку запроса из URL-адреса без начального знака вопроса и фрагмента. String
Примеры
Пример использования
queryStringAndFragment
Добавлена в версии: v1.1
Возвращает строку запроса и идентификатор фрагмента URL.
Синтаксис
Аргументы
url— URL.String
Возвращаемое значение
Возвращает строку запроса и идентификатор фрагмента URL-адреса. String
Примеры
Пример использования
topLevelDomain
Добавлена в: v1.1
Извлекает домен верхнего уровня из URL-адреса.
URL-адрес может быть указан с протоколом или без него. Например:
Синтаксис
Аргументы
url— URL.String
Возвращаемое значение
Возвращает доменное имя, если входная строка может быть интерпретирована как URL. В противном случае — пустую строку. String
Примеры
Пример использования
topLevelDomainRFC
Введена в: v22.10
Извлекает домен верхнего уровня из URL-адреса.
Аналогична функции topLevelDomain, но соответствует RFC 3986.
Синтаксис
Аргументы
url— URL-адрес.String
Возвращаемое значение
Имя домена, если входная строка может быть интерпретирована как URL-адрес. В противном случае — пустая строка. String
Примеры
Пример использования