Перейти к основному содержимому
Перейти к основному содержимому

Функции для работы с URL-адресами

Обзор

Примечание

Функции, упомянутые в этом разделе, оптимизированы для максимальной производительности и в большинстве случаев не следуют стандарту RFC-3986. Функции, реализующие RFC-3986, имеют суффикс RFC в имени функции и, как правило, работают медленнее.

Как правило, можно использовать варианты функций без суффикса RFC при работе с публично зарегистрированными доменами, которые не содержат пользовательских данных и символов @. В таблице ниже показано, какие символы в URL могут () или не могут () быть разобраны соответствующими вариантами RFC и non-RFC:

Symbolnon-RFCRFC
' '
\t
<
>
%✔*
{
}
\
^
~✔*
[
]
;✔*
=✔*
&✔*

Символы, помеченные *, являются субделимитерами в RFC 3986 и допускаются для пользовательской информации, следующей за символом @.

Существует два типа функций для работы с URL:

  • Функции, извлекающие части URL. Если соответствующая часть отсутствует в URL, возвращается пустая строка.
  • Функции, удаляющие часть URL. Если соответствующая часть в URL отсутствует, URL остаётся неизменным.
Примечание

Приведённые ниже функции генерируются из системной таблицы system.functions.

URLHierarchy

Добавлено в: v1.1

Возвращает массив, содержащий URL, усечённый в конце по символам /, ? и # в пути и строке запроса. Последовательные символы-разделители считаются за один. Результат включает протокол и хост в качестве первого элемента, а последующие элементы — всё более длинные пути, образующие иерархию.

Синтаксис

URLHierarchy(url)

Аргументы

  • url — URL для обработки. String

Возвращаемое значение

Возвращает массив URL всё большей длины, образующих иерархию. Array(String)

Примеры

Базовое использование

SELECT URLHierarchy('https://example.com/a/b?c=1')
['https://example.com/','https://example.com/a/','https://example.com/a/b','https://example.com/a/b?c=1']

URLPathHierarchy

Добавлена в: v1.1

Возвращает массив, содержащий компонент пути URL-адреса, усечённый по символам /, ? и # в конце. В отличие от URLHierarchy, результат не включает протокол и хост — он начинается с пути. Идущие подряд разделители считаются одним.

Синтаксис

URLPathHierarchy(url)

Аргументы

  • url — URL для обработки. String

Возвращаемое значение

Возвращает массив всё более длинных компонентов пути URL-адреса, формирующих иерархию. Array(String)

Примеры

Базовое использование

SELECT URLPathHierarchy('https://example.com/a/b?c=1')
['/a/','/a/b','/a/b?c=1']

cutFragment

Добавлена в версии: v1.1

Удаляет идентификатор фрагмента, включая знак решётки (#), из URL-адреса.

Синтаксис

cutFragment(url)

Аргументы

Возвращаемое значение

Возвращает URL без идентификатора фрагмента. String

Примеры

Пример использования

SELECT cutFragment('http://example.com/path?query=value#fragment123');
┌─cutFragment('http://example.com/path?query=value#fragment123')─┐
│ http://example.com/path?query=value                            │
└────────────────────────────────────────────────────────────────┘

cutQueryString

Введена в: v1.1

Удаляет строку запроса, включая вопросительный знак, из URL-адреса.

Синтаксис

cutQueryString(url)

Аргументы

Возвращаемое значение

Возвращает URL без строки параметров запроса. String

Примеры

Пример использования

SELECT cutQueryString('http://example.com/path?query=value&param=123#fragment');
┌─cutQueryString('http://example.com/path?query=value&param=123#fragment')─┐
│ http://example.com/path#fragment                                         │
└──────────────────────────────────────────────────────────────────────────┘

cutQueryStringAndFragment

Появилась в версии v1.1

Удаляет строку запроса и идентификатор фрагмента, включая вопросительный знак и символ решётки, из URL.

Синтаксис

cutQueryStringAndFragment(url)

Аргументы

  • url — URL-адрес. String

Возвращаемое значение

Возвращает URL-адрес с удалёнными строкой запроса и идентификатором фрагмента. String

Примеры

Пример использования

SELECT cutQueryStringAndFragment('http://example.com/path?query=value&param=123#fragment');
┌─cutQueryStringAndFragment('http://example.com/path?query=value&param=123#fragment')─┐
│ http://example.com/path                                                             │
└─────────────────────────────────────────────────────────────────────────────────────┘

cutToFirstSignificantSubdomain

Добавлена в: v1.1

Возвращает часть доменного имени, включающую домен верхнего уровня и субдомены вплоть до первого значимого субдомена.

Синтаксис

cutToFirstSignificantSubdomain(url)

Аргументы

  • url — URL или строка домена для обработки. String

Возвращаемое значение

Возвращает часть домена, которая включает верхние поддомены до первого значимого поддомена, если это возможно, иначе возвращает пустую строку. String

Примеры

Пример использования

SELECT
    cutToFirstSignificantSubdomain('https://news.clickhouse.com.tr/'),
    cutToFirstSignificantSubdomain('www.tr'),
    cutToFirstSignificantSubdomain('tr');
┌─cutToFirstSignificantSubdomain('https://news.clickhouse.com.tr/')─┬─cutToFirstSignificantSubdomain('www.tr')─┬─cutToFirstSignificantSubdomain('tr')─┐
│ clickhouse.com.tr                                                 │ tr                                       │                                      │
└───────────────────────────────────────────────────────────────────┴──────────────────────────────────────────┴──────────────────────────────────────┘

cutToFirstSignificantSubdomainCustom

Впервые появилась в: v21.1

Возвращает часть доменного имени, включающую домены верхнего уровня вплоть до первого значимого поддомена. Принимает имя пользовательского списка TLD. Эта функция может быть полезна, если вам нужен обновлённый список TLD или у вас есть собственный список.

Пример конфигурации

<!-- <top_level_domains_path>/var/lib/clickhouse/top_level_domains/</top_level_domains_path> -->
<top_level_domains_lists>
    <!-- https://publicsuffix.org/list/public_suffix_list.dat -->
    <public_suffix_list>public_suffix_list.dat</public_suffix_list>
    <!-- NOTE: path is under top_level_domains_path -->
</top_level_domains_lists>

Синтаксис

cutToFirstSignificantSubdomainCustom(url, tld_list_name)

Аргументы

  • url — URL или строка с доменным именем для обработки. String
  • tld_list_name — имя пользовательского списка TLD, настроенного в ClickHouse. const String

Возвращаемое значение

Возвращает часть доменного имени, которая включает верхнеуровневые поддомены вплоть до первого значимого поддомена. String

Примеры

Использование пользовательского списка TLD для нестандартных доменных имён

SELECT cutToFirstSignificantSubdomainCustom('bar.foo.there-is-no-such-domain', 'public_suffix_list')
foo.there-is-no-such-domain

cutToFirstSignificantSubdomainCustomRFC

Добавлена в версии: v22.10

Возвращает часть домена, включающую домены верхнего уровня до первого значимого поддомена. Принимает наименование пользовательского списка доменов верхнего уровня (TLD): TLD list. Эта функция может быть полезна, если вам нужен свежий список TLD или если у вас есть собственный список. Аналогична cutToFirstSignificantSubdomainCustom, но соответствует RFC 3986.

Пример конфигурации

<!-- <top_level_domains_path>/var/lib/clickhouse/top_level_domains/</top_level_domains_path> -->
<top_level_domains_lists>
    <!-- https://publicsuffix.org/list/public_suffix_list.dat -->
    <public_suffix_list>public_suffix_list.dat</public_suffix_list>
    <!-- NOTE: path is under top_level_domains_path -->
</top_level_domains_lists>

Синтаксис

cutToFirstSignificantSubdomainCustomRFC(url, tld_list_name)

Аргументы

  • url — URL или строка домена для обработки в соответствии с RFC 3986.
  • tld_list_name — имя пользовательского списка TLD, настроенного в ClickHouse.

Возвращаемое значение

Возвращает часть доменного имени, которая включает поддомены верхнего уровня до первого значимого поддомена. String

Примеры

Пример использования

SELECT cutToFirstSignificantSubdomainCustomRFC('www.foo', 'public_suffix_list');
┌─cutToFirstSignificantSubdomainCustomRFC('www.foo', 'public_suffix_list')─────┐
│ www.foo                                                                      │
└──────────────────────────────────────────────────────────────────────────────┘

cutToFirstSignificantSubdomainCustomWithWWW

Появилась в версии: v21.1

Возвращает часть доменного имени, включающую домены верхнего уровня до первого значимого поддомена, при этом префикс 'www' не удаляется. Принимает имя пользовательского списка TLD. Может быть полезно, если вам нужен актуальный список TLD или у вас есть собственный список.

Пример конфигурации

<!-- <top_level_domains_path>/var/lib/clickhouse/top_level_domains/</top_level_domains_path> -->
<top_level_domains_lists>
    <!-- https://publicsuffix.org/list/public_suffix_list.dat -->
    <public_suffix_list>public_suffix_list.dat</public_suffix_list>
    <!-- NOTE: path is under top_level_domains_path -->
</top_level_domains_lists>
    

**Syntax**

```sql
cutToFirstSignificantSubdomainCustomWithWWW(url, tld_list_name)

Аргументы

  • url — URL или строка с доменом для обработки. - tld_list_name — имя пользовательского списка TLD, настроенного в ClickHouse.

Возвращаемое значение

Часть доменного имени, включающая поддомены верхнего уровня вплоть до первого значимого поддомена, без удаления 'www'. String

Примеры

Пример использования

SELECT cutToFirstSignificantSubdomainCustomWithWWW('www.foo', 'public_suffix_list');
┌─cutToFirstSignificantSubdomainCustomWithWWW('www.foo', 'public_suffix_list')─┐
│ www.foo                                                                      │
└──────────────────────────────────────────────────────────────────────────────┘

cutToFirstSignificantSubdomainCustomWithWWWRFC

Добавлена в версии: v22.10

Возвращает часть домена, которая включает верхнеуровневые субдомены до первого значимого субдомена, не удаляя www. Принимает имя пользовательского списка TLD. Это может быть полезно, если вам нужен обновлённый список TLD или у вас есть собственный список. Похожа на cutToFirstSignificantSubdomainCustomWithWWW, но соответствует RFC 3986.

Пример конфигурации

<!-- <top_level_domains_path>/var/lib/clickhouse/top_level_domains/</top_level_domains_path> -->
<top_level_domains_lists>
    <!-- https://publicsuffix.org/list/public_suffix_list.dat -->
    <public_suffix_list>public_suffix_list.dat</public_suffix_list>
    <!-- NOTE: path is under top_level_domains_path -->
</top_level_domains_lists>
    

**Syntax**

```sql
cutToFirstSignificantSubdomainCustomWithWWWRFC(url, tld_list_name)

Аргументы

  • url — URL или строка доменного имени для обработки в соответствии с RFC 3986. - tld_list_name — имя пользовательского списка доменов верхнего уровня (TLD), настроенного в ClickHouse.

Возвращаемое значение

Возвращает часть имени домена, которая включает домены верхнего уровня и поддомены вплоть до первого значимого поддомена, при этом www не удаляется. String

Примеры

Разбор по RFC 3986 с сохранением www и пользовательским списком TLD

SELECT cutToFirstSignificantSubdomainCustomWithWWWRFC('https://www.subdomain.example.custom', 'public_suffix_list')
www.example.custom

cutToFirstSignificantSubdomainRFC

Добавлена в: v22.10

Возвращает часть доменного имени, которая включает поддомены верхнего уровня до «первого значимого поддомена». Аналогична cutToFirstSignificantSubdomain, но соответствует RFC 3986.

Синтаксис

cutToFirstSignificantSubdomainRFC(url)

Аргументы

  • url — URL или строка с доменом для обработки в соответствии с RFC 3986. String

Возвращаемое значение

Возвращает часть домена, которая включает поддомены верхнего уровня до первого значимого поддомена, если это возможно, в противном случае возвращает пустую строку. String

Примеры

Пример использования

SELECT
    cutToFirstSignificantSubdomain('http://user:password@example.com:8080'),
    cutToFirstSignificantSubdomainRFC('http://user:password@example.com:8080');
┌─cutToFirstSignificantSubdomain('http://user:password@example.com:8080')─┬─cutToFirstSignificantSubdomainRFC('http://user:password@example.com:8080')─┐
│                                                                         │ example.com                                                                │
└─────────────────────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────┘

cutToFirstSignificantSubdomainWithWWW

Добавлена в версии: v20.12

Возвращает часть доменного имени, включающую домен верхнего уровня и поддомены до «первого значимого поддомена», при этом префикс 'www.' не удаляется.

Аналогично cutToFirstSignificantSubdomain, но сохраняет префикс 'www.', если он присутствует.

Синтаксис

cutToFirstSignificantSubdomainWithWWW(url)

Аргументы

  • url — URL или строка с доменным именем для обработки. String

Возвращаемое значение

Возвращает часть домена, которая включает поддомены верхнего уровня вплоть до первого значимого поддомена (включая www), если это возможно, в противном случае — пустую строку. String

Примеры

Пример использования

SELECT
    cutToFirstSignificantSubdomainWithWWW('https://news.clickhouse.com.tr/'),
    cutToFirstSignificantSubdomainWithWWW('www.tr'),
    cutToFirstSignificantSubdomainWithWWW('tr');
┌─cutToFirstSignificantSubdomainWithWWW('https://news.clickhouse.com.tr/')─┬─cutToFirstSignificantSubdomainWithWWW('www.tr')─┬─cutToFirstSignificantSubdomainWithWWW('tr')─┐
│ clickhouse.com.tr                                                        │ www.tr                                          │                                             │
└──────────────────────────────────────────────────────────────────────────┴─────────────────────────────────────────────────┴─────────────────────────────────────────────┘

cutToFirstSignificantSubdomainWithWWWRFC

Появилась в: v22.10

Возвращает часть доменного имени, включающую поддомены верхнего уровня вплоть до «первого значимого поддомена», без удаления www. Аналогична cutToFirstSignificantSubdomainWithWWW, но соответствует RFC 3986.

Синтаксис

cutToFirstSignificantSubdomainWithWWWRFC(url)

Аргументы

  • url — строка с URL-адресом или доменным именем для обработки в соответствии с RFC 3986.

Возвращаемое значение

Возвращает часть домена, которая включает верхние поддомены до первого значимого поддомена (с «www», если возможно), в противном случае возвращает пустую строку String.

Примеры

Пример использования

SELECT
    cutToFirstSignificantSubdomainWithWWW('http:%2F%2Fwwwww.nova@mail.ru/economicheskiy'),
    cutToFirstSignificantSubdomainWithWWWRFC('http:%2F%2Fwwwww.nova@mail.ru/economicheskiy');
┌─cutToFirstSignificantSubdomainWithWWW('http:%2F%2Fwwwww.nova@mail.ru/economicheskiy')─┬─cutToFirstSignificantSubdomainWithWWWRFC('http:%2F%2Fwwwww.nova@mail.ru/economicheskiy')─┐
│                                                                                       │ mail.ru                                                                                  │
└───────────────────────────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────────────────────────────────┘

cutURLParameter

Впервые появилась в версии: v1.1

Удаляет параметр name из URL, если он присутствует. Эта функция не кодирует и не декодирует символы в именах параметров, например, Client ID и Client%20ID рассматриваются как разные имена параметров.

Синтаксис

cutURLParameter(url, name)

Аргументы

Возвращаемое значение

URL, из которого удалён параметр name. String

Примеры

Пример использования

SELECT
    cutURLParameter('http://bigmir.net/?a=b&c=d&e=f#g', 'a') AS url_without_a,
    cutURLParameter('http://bigmir.net/?a=b&c=d&e=f#g', ['c', 'e']) AS url_without_c_and_e;
┌─url_without_a────────────────┬─url_without_c_and_e──────┐
│ http://bigmir.net/?c=d&e=f#g │ http://bigmir.net/?a=b#g │
└──────────────────────────────┴──────────────────────────┘

cutWWW

Добавлен в версии v1.1

Удаляет начальное www. из доменного имени URL-адреса, если оно присутствует.

Синтаксис

cutWWW(url)

Аргументы

Возвращаемое значение

Возвращает URL с удалённым начальным www. в домене. String

Примеры

Пример использования

SELECT cutWWW('http://www.example.com/path?query=value#fragment');
┌─cutWWW('http://www.example.com/path?query=value#fragment')─┐
│ http://example.com/path?query=value#fragment               │
└────────────────────────────────────────────────────────────┘

decodeURLComponent

Добавлено в версии v1.1

Принимает URL-кодированную строку на вход и декодирует её в исходное, человекочитаемое представление.

Синтаксис

decodeURLComponent(url)

Аргументы

Возвращаемое значение

Возвращает декодированный URL. String

Примеры

Пример использования

SELECT decodeURLComponent('http://127.0.0.1:8123/?query=SELECT%201%3B') AS DecodedURL;
┌─DecodedURL─────────────────────────────┐
│ http://127.0.0.1:8123/?query=SELECT 1; │
└────────────────────────────────────────┘

decodeURLFormComponent

Впервые добавлена в v1.1

Декодирует URL-кодированные строки по правилам кодирования веб-форм (RFC-1866), при которых знаки + преобразуются в пробелы, а процент-кодированные символы декодируются.

Синтаксис

decodeURLFormComponent(url)

Аргументы

  • url — URL-адрес. String

Возвращаемое значение

Возвращает декодированный URL-адрес. String

Примеры

Пример использования

SELECT decodeURLFormComponent('http://127.0.0.1:8123/?query=SELECT%201+2%2B3') AS DecodedURL;
┌─DecodedURL────────────────────────────────┐
│ http://127.0.0.1:8123/?query=SELECT 1 2+3 │
└───────────────────────────────────────────┘

domain

Добавлена в версии v1.1

Извлекает имя хоста из URL-адреса.

URL-адрес может быть указан с протоколом или без него.

Синтаксис

domain(url)

Аргументы

Возвращаемое значение

Возвращает имя хоста, если входная строка может быть интерпретирована как URL, в противном случае — пустую строку. String

Примеры

Пример использования

SELECT domain('svn+ssh://some.svn-hosting.com:80/repo/trunk');
┌─domain('svn+ssh://some.svn-hosting.com:80/repo/trunk')─┐
│ some.svn-hosting.com                                   │
└────────────────────────────────────────────────────────┘

domainRFC

Введена в версии v22.10

Извлекает имя хоста из URL. Аналогична функции domain, но соответствует RFC 3986.

Синтаксис

domainRFC(url)

Аргументы

Возвращаемое значение

Возвращает имя хоста, если входную строку удаётся интерпретировать как URL, в противном случае — пустую строку. String

Примеры

Пример использования

SELECT
    domain('http://user:password@example.com:8080/path?query=value#fragment'),
    domainRFC('http://user:password@example.com:8080/path?query=value#fragment');
┌─domain('http://user:password@example.com:8080/path?query=value#fragment')─┬─domainRFC('http://user:password@example.com:8080/path?query=value#fragment')─┐
│                                                                           │ example.com                                                                  │
└───────────────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────────────────────┘

domainWithoutWWW

Появилась в версии: v1.1

Возвращает домен URL-адреса без ведущего www., если он присутствует.

Синтаксис

domainWithoutWWW(url)

Аргументы

  • url — URL-адрес. String

Возвращаемое значение

Возвращает имя домена, если входная строка может быть интерпретирована как URL-адрес (без ведущего www.), в противном случае — пустую строку. String

Примеры

Пример использования

SELECT domainWithoutWWW('http://paul@www.example.com:80/');
┌─domainWithoutWWW('http://paul@www.example.com:80/')─┐
│ example.com                                         │
└─────────────────────────────────────────────────────┘

domainWithoutWWWRFC

Добавлена в: v1.1

Возвращает домен без начального www., если оно присутствует. Аналогична domainWithoutWWW, но соответствует RFC 3986.

Синтаксис

domainWithoutWWWRFC(url)

Аргументы

Возвращаемое значение

Возвращает имя домена, если входную строку можно интерпретировать как URL (без начального www.), в противном случае — пустую строку. String

Примеры

Пример использования

SELECT
    domainWithoutWWW('http://user:password@www.example.com:8080/path?query=value#fragment'),
    domainWithoutWWWRFC('http://user:password@www.example.com:8080/path?query=value#fragment');
┌─domainWithoutWWW('http://user:password@www.example.com:8080/path?query=value#fragment')─┬─domainWithoutWWWRFC('http://user:password@www.example.com:8080/path?query=value#fragment')─┐
│                                                                                         │ example.com                                                                                │
└─────────────────────────────────────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────────────────────┘

encodeURLComponent

Введена в версии: v22.3

Принимает обычную строку и преобразует её в URL-кодированный формат (percent-encoding), в котором специальные символы заменяются их процентно-кодированными эквивалентами.

Синтаксис

encodeURLComponent(url)

Аргументы

Возвращаемое значение

Возвращает закодированный URL. String

Примеры

Пример использования

SELECT encodeURLComponent('http://127.0.0.1:8123/?query=SELECT 1;') AS EncodedURL;
┌─EncodedURL───────────────────────────────────────────────┐
│ http%3A%2F%2F127.0.0.1%3A8123%2F%3Fquery%3DSELECT%201%3B │
└──────────────────────────────────────────────────────────┘

encodeURLFormComponent

Добавлена в: v22.3

Кодирует строки по правилам кодирования данных HTML-форм (RFC-1866), при которых пробелы заменяются на символ «+», а специальные символы кодируются с использованием процентного кодирования.

Синтаксис

encodeURLFormComponent(url)

Аргументы

  • url — URL-адрес. String

Возвращаемое значение

Возвращает закодированный URL-адрес. String

Примеры

Пример использования

SELECT encodeURLFormComponent('http://127.0.0.1:8123/?query=SELECT 1 2+3') AS EncodedURL;
┌─EncodedURL────────────────────────────────────────────────┐
│ http%3A%2F%2F127.0.0.1%3A8123%2F%3Fquery%3DSELECT+1+2%2B3 │
└───────────────────────────────────────────────────────────┘

extractURLParameter

Введена в версии: v1.1

Возвращает значение параметра name в URL, если он присутствует; в противном случае возвращается пустая строка. Если существует несколько параметров с этим именем, возвращается первое вхождение. Функция предполагает, что значение параметра в аргументе url закодировано тем же способом, что и аргумент name.

Синтаксис

extractURLParameter(url, name)

Аргументы

  • url — URL. String
  • name — имя параметра. String

Возвращаемое значение

Возвращает значение параметра URL с указанным именем. String

Примеры

Пример использования

SELECT extractURLParameter('http://example.com/?param1=value1&param2=value2', 'param1');
┌─extractURLPa⋯, 'param1')─┐
│ value1                   │
└──────────────────────────┘

extractURLParameterNames

Появилась в версии: v1.1

Возвращает массив строк, содержащий имена параметров URL. Значения не декодируются.

Синтаксис

extractURLParameterNames(url)

Аргументы

Возвращаемое значение

Возвращает массив строк — имён параметров URL. Array(String)

Примеры

Пример использования

SELECT extractURLParameterNames('http://example.com/?param1=value1&param2=value2');
┌─extractURLPa⋯m2=value2')─┐
│ ['param1','param2']      │
└──────────────────────────┘

extractURLParameters

Появилась в версии: v1.1

Возвращает массив строк вида name=value, соответствующих URL-параметрам. Значения не декодируются.

Синтаксис

extractURLParameters(url)

Аргументы

Возвращаемое значение

Возвращает массив строк формата name=value, соответствующих параметрам URL. Array(String)

Примеры

Пример использования

SELECT extractURLParameters('http://example.com/?param1=value1&param2=value2');
┌─extractURLParame⋯&param2=value2')─┐
│ ['param1=value1','param2=value2'] │
└───────────────────────────────────┘

firstSignificantSubdomain

Появилась в версии: v1.1

Возвращает «первый значимый поддомен».

Первым значимым поддоменом является домен второго уровня, если это 'com', 'net', 'org' или 'co'. В противном случае это домен третьего уровня.

Например, firstSignificantSubdomain('https://news.clickhouse.com/&#39;) = 'clickhouse', firstSignificantSubdomain ('https://news.clickhouse.com.tr/&#39;) = 'clickhouse'.

Список «незначительных» доменов второго уровня и другие детали реализации могут измениться в будущем.

Синтаксис

Аргументы

  • Отсутствуют.

Возвращаемое значение

Примеры

firstSignificantSubdomain

SELECT firstSignificantSubdomain('https://news.clickhouse.com/')

firstSignificantSubdomainCustom

Введена в версии v21.1

Возвращает первый значимый поддомен URL на основе пользовательского списка TLD (Top-Level Domain). Имя пользовательского списка TLD соответствует конфигурации, которая определяет, какие суффиксы доменов следует считать доменами верхнего уровня. Это полезно для нестандартных иерархий доменов верхнего уровня. Функция использует упрощённый алгоритм разбора URL, который предполагает, что протокол и всё следующее за ним уже удалены.

Синтаксис

firstSignificantSubdomainCustom(url, tld_list_name)

Аргументы

  • url — URL-адрес, из которого нужно извлечь поддомен. String
  • tld_list_name — имя настраиваемого списка TLD из конфигурации. String

Возвращаемое значение

Возвращает первый значимый поддомен. String

Примеры

Базовое использование

SELECT firstSignificantSubdomainCustom('https://news.example.com', 'public_suffix_list')
example

firstSignificantSubdomainCustomRFC

Добавлена в версии v22.10

Похожа на firstSignificantSubdomainCustom, но использует разбор URL в соответствии с RFC 3986 вместо упрощённого алгоритма.

Синтаксис

firstSignificantSubdomainCustomRFC(url, tld_list_name)

Аргументы

  • url — URL-адрес, из которого извлекается поддомен. String
  • tld_list_name — имя пользовательского списка TLD из конфигурации. String

Возвращаемое значение

Возвращает первый значимый поддомен. String

Примеры

Базовое использование

SELECT firstSignificantSubdomainCustomRFC('https://news.example.com', 'public_suffix_list')
example

firstSignificantSubdomainRFC

Введена в версии: v22.10

Возвращает «первый значимый поддомен» в соответствии с RFC 1034.

Синтаксис

Аргументы

  • Нет.

Возвращаемое значение

Примеры

fragment

Добавлено в версии v1.1

Возвращает идентификатор фрагмента без начального символа #.

Синтаксис

fragment(url)

Аргументы

Возвращаемое значение

Возвращает идентификатор фрагмента без начального символа #. String

Примеры

Пример использования

SELECT fragment('https://clickhouse.com/docs/getting-started/quick-start/cloud#1-create-a-clickhouse-service');
┌─fragment('http⋯ouse-service')─┐
│ 1-create-a-clickhouse-service │
└───────────────────────────────┘

netloc

Добавлено в: v20.5

Извлекает сетевую часть (username:password@host:port) из URL.

Синтаксис

netloc(url)

Аргументы

Возвращаемое значение

Возвращает username:password@host:port из указанного URL. String

Примеры

Пример использования

SELECT netloc('http://paul@www.example.com:80/');
┌─netloc('http⋯e.com:80/')─┐
│ paul@www.example.com:80  │
└──────────────────────────┘

path

Введено в версии: v1.1

Возвращает путь URL-адреса без строки запроса.

Синтаксис

path(url)

Аргументы

Возвращаемое значение

Возвращает путь URL-адреса без строки запроса. String

Примеры

Пример использования

SELECT path('https://clickhouse.com/docs/sql-reference/functions/url-functions/?query=value');
┌─path('https://clickhouse.com/en/sql-reference/functions/url-functions/?query=value')─┐
│ /docs/sql-reference/functions/url-functions/                                         │
└──────────────────────────────────────────────────────────────────────────────────────┘

pathFull

Добавлена в версии: v1.1

То же, что и path, но включает строку запроса и фрагмент URL-адреса.

Синтаксис

pathFull(url)

Аргументы

Возвращаемое значение

Возвращает путь URL-адреса, включая строку запроса и фрагмент. String

Примеры

Пример использования

SELECT pathFull('https://clickhouse.com/docs/sql-reference/functions/url-functions/?query=value#section');
┌─pathFull('https://clickhouse.com⋯unctions/?query=value#section')─┐
│ /docs/sql-reference/functions/url-functions/?query=value#section │
└──────────────────────────────────────────────────────────────────┘

port

Введена в версии: v20.5

Возвращает порт URL-адреса или default_port, если в URL-адресе порт не указан или URL-адрес не удаётся разобрать.

Синтаксис

port(url[, default_port])

Аргументы

  • url — URL. String
  • default_port — Необязательный параметр. Номер порта по умолчанию, который будет возвращён. По умолчанию 0. UInt16

Возвращаемое значение

Возвращает порт URL или порт по умолчанию, если порт не указан в URL либо в случае ошибки валидации. UInt16

Примеры

Пример использования

SELECT port('https://clickhouse.com:8443/docs'), port('https://clickhouse.com/docs', 443);
┌─port('https://clickhouse.com:8443/docs')─┬─port('https://clickhouse.com/docs', 443)─┐
│                                     8443 │                                      443 │
└──────────────────────────────────────────┴──────────────────────────────────────────┘

portRFC

Введена в версии v22.10

Возвращает порт или default_port, если URL не содержит порта или не может быть разобран. Аналогична port, но соответствует RFC 3986.

Синтаксис

portRFC(url[, default_port])

Аргументы

  • url — URL. String
  • default_port — необязательный параметр. Номер порта, возвращаемый по умолчанию. По умолчанию — 0. UInt16

Возвращаемое значение

Возвращает порт или порт по умолчанию, если в URL не указан порт или в случае ошибки валидации. UInt16

Примеры

Пример использования

SELECT port('http://user:password@example.com:8080/'), portRFC('http://user:password@example.com:8080/');
┌─port('http:/⋯com:8080/')─┬─portRFC('htt⋯com:8080/')─┐
│                        0 │                     8080 │
└──────────────────────────┴──────────────────────────┘

protocol

Добавлено в версии: v1.1

Извлекает протокол из URL.

Примеры типичных значений, возвращаемых функцией: http, https, ftp, mailto, tel, magnet.

Синтаксис

protocol(url)

Аргументы

Возвращаемое значение

Возвращает протокол URL-адреса или пустую строку, если его не удаётся определить. String

Примеры

Пример использования

SELECT protocol('https://clickhouse.com/');
┌─protocol('https://clickhouse.com/')─┐
│ https                               │
└─────────────────────────────────────┘

queryString

Добавлено в: v1.1

Возвращает строку запроса URL без начального знака вопроса, # и всего, что следует после #.

Синтаксис

queryString(url)

Аргументы

  • url — URL-адрес. String

Возвращаемое значение

Возвращает строку запроса из URL-адреса без начального знака вопроса и фрагмента. String

Примеры

Пример использования

SELECT queryString('https://clickhouse.com/docs?query=value&param=123#section');
┌─queryString(⋯3#section')─┐
│ query=value&param=123    │
└──────────────────────────┘

queryStringAndFragment

Добавлена в версии: v1.1

Возвращает строку запроса и идентификатор фрагмента URL.

Синтаксис

queryStringAndFragment(url)

Аргументы

Возвращаемое значение

Возвращает строку запроса и идентификатор фрагмента URL-адреса. String

Примеры

Пример использования

SELECT queryStringAndFragment('https://clickhouse.com/docs?query=value&param=123#section');
┌─queryStringAnd⋯=123#section')─┐
│ query=value&param=123#section │
└───────────────────────────────┘

topLevelDomain

Добавлена в: v1.1

Извлекает домен верхнего уровня из URL-адреса.

Примечание

URL-адрес может быть указан с протоколом или без него. Например:

svn+ssh://some.svn-hosting.com:80/repo/trunk
some.svn-hosting.com:80/repo/trunk
https://clickhouse.com/time/

Синтаксис

topLevelDomain(url)

Аргументы

Возвращаемое значение

Возвращает доменное имя, если входная строка может быть интерпретирована как URL. В противном случае — пустую строку. String

Примеры

Пример использования

SELECT topLevelDomain('svn+ssh://www.some.svn-hosting.com:80/repo/trunk');
┌─topLevelDomain('svn+ssh://www.some.svn-hosting.com:80/repo/trunk')─┐
│ com                                                                │
└────────────────────────────────────────────────────────────────────┘

topLevelDomainRFC

Введена в: v22.10

Извлекает домен верхнего уровня из URL-адреса. Аналогична функции topLevelDomain, но соответствует RFC 3986.

Синтаксис

topLevelDomainRFC(url)

Аргументы

  • url — URL-адрес. String

Возвращаемое значение

Имя домена, если входная строка может быть интерпретирована как URL-адрес. В противном случае — пустая строка. String

Примеры

Пример использования

SELECT topLevelDomain('http://foo:foo%41bar@foo.com'), topLevelDomainRFC('http://foo:foo%41bar@foo.com');
┌─topLevelDomain('http://foo:foo%41bar@foo.com')─┬─topLevelDomainRFC('http://foo:foo%41bar@foo.com')─┐
│                                                │ com                                               │
└────────────────────────────────────────────────┴───────────────────────────────────────────────────┘