URL
движок таблиц
Запросы данных к/от удаленного HTTP/HTTPS сервера. Этот движок похож на движок File.
Синтаксис: URL(URL [,Format] [,CompressionMethod])
-
Параметр
URL
должен соответствовать структуре Унииформного Ресурса Локатора. Указанный URL должен указывать на сервер, использующий HTTP или HTTPS. Это не требует никаких дополнительных заголовков для получения ответа от сервера. -
Format
должен быть одним из форматов, которые ClickHouse может использовать в запросахSELECT
и, если необходимо, вINSERT
. Для полного списка поддерживаемых форматов смотрите Форматы.Если этот аргумент не указан, ClickHouse автоматически определяет формат по суффиксу параметра
URL
. Если суффикс параметраURL
не соответствует ни одному из поддерживаемых форматов, создание таблицы завершается неудачей. Например, для выражения движкаURL('http://localhost/test.json')
применяется форматJSON
. -
CompressionMethod
указывает, нужно ли сжимать тело HTTP. Если сжатие включено, HTTP-пакеты, отправляемые движком URL, содержат заголовок 'Content-Encoding', чтобы указать, какой метод сжатия используется.
Чтобы включить сжатие, сначала убедитесь, что удаленная HTTP-точка, указанная параметром URL
, поддерживает соответствующий алгоритм сжатия.
Поддерживаемый CompressionMethod
должен быть одним из следующих:
- gzip или gz
- deflate
- brotli или br
- lzma или xz
- zstd или zst
- lz4
- bz2
- snappy
- none
- auto
Если CompressionMethod
не указан, по умолчанию используется auto
. Это означает, что ClickHouse автоматически определяет метод сжатия по суффиксу параметра URL
. Если суффикс соответствует любому из перечисленных выше методов сжатия, применяется соответствующее сжатие, или сжатие не будет включено.
Например, для выражения движка URL('http://localhost/test.gzip')
применяется метод сжатия gzip
, но для URL('http://localhost/test.fr')
сжатие не включено, потому что суффикс fr
не соответствует ни одному из методов сжатия выше.
Использование
Запросы INSERT
и SELECT
преобразуются в POST
и GET
запросы соответственно. Для обработки POST
запросов удаленный сервер должен поддерживать
Chunked transfer encoding.
Вы можете ограничить максимальное количество перенаправлений HTTP GET, используя настройку max_http_get_redirects.
Пример
1. Создайте таблицу url_engine_table
на сервере:
2. Создайте базовый HTTP сервер с использованием стандартных инструментов Python 3 и запустите его:
3. Запросите данные:
Подробности реализации
- Чтения и записи могут выполняться параллельно.
- Не поддерживается:
- Операции
ALTER
иSELECT...SAMPLE
. - Индексы.
- Репликация.
- Операции
Виртуальные колонки
_path
— Путь кURL
. Тип:LowCardinality(String)
._file
— Имя ресурсаURL
. Тип:LowCardinality(String)
._size
— Размер ресурса в байтах. Тип:Nullable(UInt64)
. Если размер неизвестен, значениеNULL
._time
— Время последнего изменения файла. Тип:Nullable(DateTime)
. Если время неизвестно, значениеNULL
._headers
- Заголовки HTTP-ответа. Тип:Map(LowCardinality(String), LowCardinality(String))
.
Настройки хранения
- engine_url_skip_empty_files - позволяет пропускать пустые файлы при чтении. По умолчанию отключен.
- enable_url_encoding - позволяет включать/выключать декодирование/кодирование пути в uri. По умолчанию включен.