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

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