URL Table Engine
Запросы данных из/в удаленный HTTP/HTTPS сервер. Этот движок аналогичен движку File.
Синтаксис: URL(URL [,Format] [,CompressionMethod])
-
Параметр
URL
должен соответствовать структуре Уникального Ресурса Локатора. Указанный 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
не соответствует ни одному из вышеперечисленных методов сжатия.
Usage
Запросы INSERT
и SELECT
преобразуются в запросы POST
и GET
,
соответственно. Для обработки POST
запросов удаленный сервер должен поддерживать
Chunked transfer encoding.
Вы можете ограничить максимальное количество перенаправлений HTTP GET, используя настройку max_http_get_redirects.
Example
1. Создайте таблицу url_engine_table
на сервере:
2. Создайте простой HTTP-сервер с использованием стандартных инструментов Python 3 и запустите его:
3. Запросите данные:
Details of Implementation
- Чтения и записи могут выполняться параллельно
- Не поддерживаются:
- операции
ALTER
иSELECT...SAMPLE
. - Индексы.
- Репликация.
- операции
Virtual Columns
_path
— Путь кURL
. Тип:LowCardinality(String)
._file
— Имя ресурсаURL
. Тип:LowCardinality(String)
._size
— Размер ресурса в байтах. Тип:Nullable(UInt64)
. Если размер неизвестен, значение равноNULL
._time
— Время последнего изменения файла. Тип:Nullable(DateTime)
. Если время неизвестно, значение равноNULL
._headers
- Заголовки HTTP-ответа. Тип:Map(LowCardinality(String), LowCardinality(String))
.
Storage Settings
- engine_url_skip_empty_files - позволяет пропускать пустые файлы при чтении. Отключено по умолчанию.
- enable_url_encoding - позволяет включать/выключать декодирование/кодирование пути в uri. Включено по умолчанию.