Функции для работы с URL
Обзор
Функции, упомянутые в этом разделе, оптимизированы для максимальной производительности и в большинстве случаев не следуют стандарту RFC-3986.
Функции, которые реализуют RFC-3986, имеют суффикс RFC в имени функции и, как правило, работают медленнее.
Как правило, вы можете использовать варианты функций без RFC при работе с публично зарегистрированными доменами, которые не содержат ни пользовательской части, ни символа @.
В таблице ниже указано, какие символы в URL могут (✔) или не могут (✗) быть разобраны соответствующими вариантами с RFC и без RFC:
| Symbol | non-RFC | RFC | |
|---|---|---|---|
| ' ' | ✗ | ✗ | |
| \t | ✗ | ✗ | |
| < | ✗ | ✗ | |
| > | ✗ | ✗ | |
| % | ✗ | ✔* | |
| { | ✗ | ✗ | |
| } | ✗ | ✗ | |
| ✗ | ✗ | ||
| \ | ✗ | ✗ | |
| ^ | ✗ | ✗ | |
| ~ | ✗ | ✔* | |
| [ | ✗ | ✗ | |
| ] | ✗ | ✔ | |
| ; | ✗ | ✔* | |
| = | ✗ | ✔* | |
| & | ✗ | ✔* |
Символы, помеченные *, являются субразделителями в RFC 3986 и допускаются в пользовательской информации, следующей за символом @.
Существует два типа функций для работы с URL:
- Функции, которые извлекают части URL. Если соответствующая часть отсутствует в URL, возвращается пустая строка.
- Функции, которые удаляют часть URL. Если в URL нет ничего подобного, URL остаётся без изменений.
Приведённые ниже функции сгенерированы из системной таблицы system.functions.
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 или если у вас есть собственный список. Аналогична 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, из которого удалён параметр 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), при которых знаки + преобразуются в пробелы, а символы в percent-кодировке декодируются.
Синтаксис
Аргументы
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-кодированный (процентное кодирование) формат, в котором специальные символы заменяются их процентно закодированными эквивалентами.
Синтаксис
Аргументы
url— URL.String
Возвращаемое значение
Возвращает закодированный URL. String
Примеры
Пример использования
encodeURLFormComponent
Добавлена в версии: v22.3
Кодирует строки по правилам кодирования веб-форм (RFC-1866), при которых пробелы преобразуются в символ «+», а специальные символы представляются в виде percent-encoding.
Синтаксис
Аргументы
url— URL.String
Возвращаемое значение
Возвращает закодированный URL. String
Примеры
Пример использования
extractURLParameter
Появилась в версии: v1.1
Возвращает значение параметра name в URL, если он присутствует, в противном случае возвращается пустая строка.
Если в URL несколько параметров с таким именем, возвращается первое вхождение.
Функция предполагает, что 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
Добавлена в версии: v
Возвращает «первый значимый поддомен».
Первым значимым поддоменом считается домен второго уровня, если он равен 'com', 'net', 'org' или 'co'. В противном случае это домен третьего уровня.
Например, firstSignificantSubdomain('https://news.clickhouse.com/') = 'clickhouse', firstSignificantSubdomain('https://news.clickhouse.com.tr/') = 'clickhouse'.
Список «незначимых» доменов второго уровня и другие детали реализации могут измениться в будущем.
Синтаксис
Аргументы
- Нет.
Возвращаемое значение
Примеры
firstSignificantSubdomain
firstSignificantSubdomainRFC
Появилась в версии: v
Возвращает «первый значимый поддомен» в соответствии с 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.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
Примеры
Пример использования