Движок таблиц 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. Включено по умолчанию.