Skip to main content
Интеграция с каталогом SeaweedFS работает только с таблицами Iceberg.
ClickHouse поддерживает интеграцию с несколькими каталогами (Unity, Glue, REST, Polaris и т. д.). В этом руководстве описано, как запрашивать данные с помощью ClickHouse и каталога SeaweedFS. SeaweedFS — это распределённое хранилище файлов и объектов с открытым исходным кодом и S3-совместимым шлюзом. Его S3-бакеты таблиц включают оба компонента развертывания Iceberg: встроенный REST-каталог Iceberg предоставляет метаданные таблиц, а бакет таблиц хранит данные таблиц в виде файлов Parquet по той же конечной точке S3:
  • Единый сервис — метаданные каталога и данные Parquet обслуживаются одним процессом без отдельной базы данных метаданных
  • Соответствие REST API спецификации REST-каталога Iceberg
  • Обслуживание на стороне сервера — автоматическая компактация файлов Parquet и удаление устаревших снимков без внешнего сервиса обслуживания
Поскольку эта возможность экспериментальная, её необходимо включить с помощью: SET allow_experimental_database_iceberg = 1;

Настройка локальной среды разработки

Для локальной разработки и тестирования SeaweedFS и ClickHouse можно запустить с помощью Docker Compose. Этот подход идеально подходит для обучения, прототипирования и разработки.

Предварительные требования

  1. Docker и Docker Compose: убедитесь, что Docker установлен и запущен.
  2. Версии: SeaweedFS 4.42 или новее; ClickHouse 26.8 или новее (версии начиная с 25.8 поддерживают чтение и вставку, но для создания таблиц через каталог требуется версия 26.8).
  3. Python с PyIceberg (необязательно): используется ниже для заполнения демонстрационных данных.

Настройка локального каталога SeaweedFS

Шаг 1: Создайте папку для запуска примера, затем создайте файл s3config.json с учётными данными для шлюза S3 и каталога:
Шаг 2: Создайте файл docker-compose.yml со следующей конфигурацией:
Команда mini запускает весь стек SeaweedFS в одном контейнере. Флаг -tableBucket=analytics заранее создаёт бакет S3 Tables с именем analytics, который используется в качестве хранилища Iceberg. Шаг 3: Выполните следующую команду, чтобы запустить сервисы:

Заполнение тестовыми данными

Каталог изначально пуст. Создайте таблицу и добавьте в неё несколько строк с помощью PyIceberg (pip install pyiceberg pyarrow):

Подключение к локальному каталогу SeaweedFS

Подключитесь к контейнеру ClickHouse:
Затем создайте подключение к каталогу SeaweedFS:
Аргументы движка содержат учетные данные S3, которые ClickHouse использует для чтения данных таблицы, а catalog_credential и oauth_server_uri используются для аутентификации в самом каталоге по потоку OAuth2 Client Credentials. SeaweedFS принимает один и тот же ключ доступа и секретный ключ в обоих случаях.

Выполнение запросов к таблицам каталога SeaweedFS в ClickHouse

Теперь, когда соединение установлено, можно выполнять запросы к каталогу SeaweedFS. Например:
Требуются обратные кавычкиОбратные кавычки требуются, поскольку ClickHouse не поддерживает более одного пространства имен.
Чтобы выполнить запрос к таблице:

Создание таблиц и запись данных из ClickHouse

Вы также можете создавать таблицы в каталоге SeaweedFS и записывать в них данные непосредственно из ClickHouse:
Предложение движка IcebergS3 задает путь в хранилище для новой таблицы, а write_full_path_in_iceberg_metadata указывает ClickHouse зарегистрировать в каталоге полный путь к таблице.
Для создания таблиц через каталог требуется ClickHouse версии 26.8 или выше. Версии с 26.4 по 26.7 записывают файлы таблицы до регистрации пространства имен, что SeaweedFS отклоняет, если пространство имен еще не существует в каталоге; версии до 26.4, по-видимому, выполняются успешно, но файлы таблицы записываются в объектное хранилище без регистрации в каталоге.
При коммите вставки ClickHouse каталог SeaweedFS исправляет метаданные, которые экспериментальный writer пока не создает: заполняет отсутствующие ID полей в манифестах, преобразует пути к файлам относительно бакета в абсолютные пути и задает для таблицы сопоставление имен по умолчанию. После этого строгие reader, такие как PyIceberg и Spark, могут читать строки, записанные ClickHouse. Для этого требуется SeaweedFS версии 4.42 или выше.

Загрузка данных из озера данных в ClickHouse

Чтобы загрузить данные из каталога SeaweedFS в ClickHouse, сначала создайте локальную таблицу ClickHouse:
Затем загрузите данные из таблицы каталога SeaweedFS с помощью INSERT INTO SELECT:
Последнее изменение 16 августа 2026 г.