Движок таблиц S3Queue
Этот движок обеспечивает интеграцию с Amazon S3 и позволяет стриминговый импорт. Этот движок похож на движки Kafka и RabbitMQ, но предоставляет специфические функции для S3.
Создание таблицы
Перед 24.7
необходимо использовать префикс s3queue_
для всех настроек, кроме mode
, after_processing
и keeper_path
.
Параметры движка
Параметры S3Queue
такие же, как и поддерживаемые движком таблиц S3
. Смотрите раздел параметров здесь.
Пример
Использование именованных коллекций:
Настройки
Чтобы получить список настроек, сконфигурированных для таблицы, используйте таблицу system.s3_queue_settings
. Доступно с 24.10
.
mode
Возможные значения:
- unordered — В режиме unordered отслеживается набор всех уже обработанных файлов с помощью постоянных узлов в ZooKeeper.
- ordered — В режиме ordered файлы обрабатываются в лексикографическом порядке. Это означает, что если файл с именем 'BBB' был обработан в какой-то момент, а позже в корзину добавлен файл с именем 'AA', он будет проигнорирован. Хранится только максимальное имя (в лексикографическом смысле) успешно потребленного файла и имена файлов, которые будут повторно обработаны после неудачной попытки загрузки в ZooKeeper.
Значение по умолчанию: ordered
в версиях до 24.6. Начиная с 24.6, значение по умолчанию отсутствует, настройка должна быть указана вручную. Для таблиц, созданных в более ранних версиях, значение по умолчанию останется Ordered
для совместимости.
after_processing
Удалить или оставить файл после успешной обработки. Возможные значения:
- keep.
- delete.
Значение по умолчанию: keep
.
keeper_path
Путь в ZooKeeper может быть указан как настройка движка таблицы, или путь по умолчанию может быть сгенерирован из пути, предоставленного глобальной конфигурацией, и UUID таблицы. Возможные значения:
- String.
Значение по умолчанию: /
.
s3queue_loading_retries
Попытайтесь загрузить файл до указанного количества раз. По умолчанию повтора нет. Возможные значения:
- Положительное целое число.
Значение по умолчанию: 0
.
s3queue_processing_threads_num
Количество потоков для выполнения обработки. Применяется только для режима Unordered
.
Значение по умолчанию: 1
.
s3queue_enable_logging_to_s3queue_log
Включить логирование в system.s3queue_log
.
Значение по умолчанию: 0
.
s3queue_polling_min_timeout_ms
Указывает минимальное время, в миллисекундах, которое ClickHouse ждет перед следующей попыткой опроса.
Возможные значения:
- Положительное целое число.
Значение по умолчанию: 1000
.
s3queue_polling_max_timeout_ms
Определяет максимальное время, в миллисекундах, которое ClickHouse ждет перед началом следующей попытки опроса.
Возможные значения:
- Положительное целое число.
Значение по умолчанию: 10000
.
s3queue_polling_backoff_ms
Определяет дополнительное время ожидания, добавляемое к предыдущему интервалу опроса, если новые файлы не найдены. Следующий опрос происходит после суммы предыдущего интервала и этого значения backoff, или максимального интервала, в зависимости от того, что меньше.
Возможные значения:
- Положительное целое число.
Значение по умолчанию: 0
.
s3queue_tracked_files_limit
Позволяет ограничить количество узлов ZooKeeper, если используется режим 'unordered', не делает ничего для режима 'ordered'. Если достигнуто ограничение, самые старые обработанные файлы будут удалены из узла ZooKeeper и обработаны повторно.
Возможные значения:
- Положительное целое число.
Значение по умолчанию: 1000
.
s3queue_tracked_file_ttl_sec
Максимальное количество секунд для хранения обработанных файлов в узле ZooKeeper (по умолчанию хранится вечно) для режима 'unordered', не делает ничего для режима 'ordered'. После указанного количества секунд файл будет повторно импортирован.
Возможные значения:
- Положительное целое число.
Значение по умолчанию: 0
.
s3queue_cleanup_interval_min_ms
Для режима 'Ordered'. Определяет минимальную границу для интервала пересмотра для фоновой задачи, которая отвечает за поддержку TTL отслеживаемых файлов и максимального общего количества отслеживаемых файлов.
Значение по умолчанию: 10000
.
s3queue_cleanup_interval_max_ms
Для режима 'Ordered'. Определяет максимальную границу для интервала пересмотра для фоновой задачи, которая отвечает за поддержку TTL отслеживаемых файлов и максимального общего количества отслеживаемых файлов.
Значение по умолчанию: 30000
.
s3queue_buckets
Для режима 'Ordered'. Доступно с 24.6
. Если есть несколько реплик таблицы S3Queue, каждая из которых работает с одним и тем же каталогом метаданных в Keeper, значение s3queue_buckets
должно быть не меньше количества реплик. Если также используется настройка s3queue_processing_threads
, имеет смысл увеличить значение настройки s3queue_buckets
, поскольку оно определяет фактическую параллелизм обработки S3Queue
.
Настройки, связанные с S3
Движок поддерживает все настройки, связанные с S3. Для получения дополнительной информации о настройках S3 смотрите здесь.
Управление доступом на основе ролей S3
S3 Role-Based Access is available in the Scale and Enterprise plans. To upgrade, visit the Plans page in the cloud console.
Движок таблиц s3Queue поддерживает управление доступом на основе ролей. Смотрите документацию здесь для настройки роли для доступа к вашему бакету.
После того как роль настроена, roleARN
можно передать через параметр extra_credentials
, как показано ниже:
Режим Ordered для S3Queue
Режим обработки S3Queue
позволяет хранить меньше метаданных в ZooKeeper, но имеет ограничение, что файлы, добавленные позже по времени, должны иметь алфавитно большие имена.
Режим ordered
S3Queue
, как и unordered
, поддерживает настройку (s3queue_)processing_threads_num
(префикс s3queue_
опционален), которая позволяет контролировать количество потоков, которые будут обрабатывать файлы S3
локально на сервере.
В добавление режим ordered
также вводит другую настройку, называемую (s3queue_)buckets
, которая означает "логические потоки". Это означает, что в распределенной среде, когда есть несколько серверов с репликами таблицы S3Queue
, где эта настройка определяет количество единиц обработки. Например, каждый поток обработки на каждой реплике S3Queue
попытается заблокировать определенный bucket
для обработки, каждый bucket
принадлежит определенным файлам по хешу имени файла. Поэтому в распределенной среде крайне рекомендуется, чтобы значение настройки (s3queue_)buckets
было не меньше, чем количество реплик или больше. Нормально, если количество ведер больше, чем количество реплик. Наиболее оптимальным сценарием будет соответствие значения настройки (s3queue_)buckets
произведению number_of_replicas
и (s3queue_)processing_threads_num
.
Настройка (s3queue_)processing_threads_num
не рекомендуется к использованию до версии 24.6
.
Настройка (s3queue_)buckets
доступна начиная с версии 24.6
.
Описание
SELECT
не является особенно полезным для стримингового импорта (за исключением отладки), потому что каждый файл может быть импортирован только один раз. Более практично создать потоки в реальном времени, используя материализованные представления. Для этого:
- Используйте движок для создания таблицы для потребления из указанного пути в S3 и рассматривайте это как поток данных.
- Создайте таблицу с желаемой структурой.
- Создайте материализованное представление, которое преобразует данные из движка и помещает их в ранее созданную таблицу.
Когда MATERIALIZED VIEW
соединяется с движком, он начинает собирать данные в фоновом режиме.
Пример:
Виртуальные колонки
_path
— Путь к файлу._file
— Имя файла.
Для получения дополнительной информации о виртуальных колонках смотрите здесь.
Шаблоны в пути
Аргумент path
может указывать на несколько файлов, используя шаблоны в стиле bash. Для того чтобы файл обрабатывался, он должен существовать и соответствовать всему паттерну пути. Список файлов определяется во время SELECT
(не в момент CREATE
).
*
— Заменяет любое количество любых символов, кроме/
, включая пустую строку.**
— Заменяет любое количество любых символов, включая/
, включая пустую строку.?
— Заменяет любой один символ.{some_string,another_string,yet_another_one}
— Заменяет любую из строк'some_string', 'another_string', 'yet_another_one'
.{N..M}
— Заменяет любое число в диапазоне от N до M, включая оба края. N и M могут иметь ведущие нули, например000..078
.
Конструкции с {}
аналогичны функции таблицы remote.
Ограничения
- Дублирующие строки могут быть следствием:
-
Исключения, происходящего во время парсинга в процессе обработки файла, и повторы включены через
s3queue_loading_retries
; -
S3Queue
настроен на нескольких серверах, указывающих на один и тот же путь в ZooKeeper, и сессия Keeper истекает, прежде чем один сервер сможет зафиксировать обработанный файл, что может привести к тому, что другой сервер начнет обработку файла, который мог быть частично или полностью обработан первым сервером; -
ненормальное завершение работы сервера.
- Если
S3Queue
настроен на нескольких серверах, указывающих на один и тот же путь в ZooKeeper, и используется режимOrdered
, тогдаs3queue_loading_retries
не будет работать. Это будет исправлено в ближайшее время.
Интроспекция
Для интроспекции используйте безстатусную таблицу system.s3queue
и постоянную таблицу system.s3queue_log
.
system.s3queue
. Эта таблица не постоянная и показывает текущее состояние в памятиS3Queue
: какие файлы в настоящее время обрабатываются, какие файлы были обработаны или не удались.
Пример:
system.s3queue_log
. Постоянная таблица. Имеет ту же информацию, что иsystem.s3queue
, но для обработанных и неудачных файлов.
Таблица имеет следующую структуру:
Для использования system.s3queue_log
определите его конфигурацию в файле конфигурации сервера:
Пример: