Движок таблицы URL
Выполняет чтение и запись данных на удалённый HTTP/HTTPS-сервер. Этот движок похож на движок File.
Синтаксис: URL(URL [,Format] [,CompressionMethod])
-
Параметр
URLдолжен соответствовать структуре Uniform Resource Locator. Указанный URL должен указывать на сервер, использующий HTTP или HTTPS. Для получения ответа от сервера не требуются дополнительные заголовки. -
Formatдолжен быть форматом, который ClickHouse может использовать в запросахSELECTи, при необходимости, в запросахINSERT. Полный список поддерживаемых форматов см. в разделе Formats.Если этот аргумент не указан, 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 преобразуются соответственно в HTTP-запросы 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. По умолчанию включена.