Перейти к основному содержимому
Перейти к основному содержимому

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. Включено по умолчанию.