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