Skip to main content
A integração com o catálogo SeaweedFS funciona apenas com tabelas Iceberg.
O ClickHouse oferece integração com vários catálogos (Unity, Glue, REST, Polaris etc.). Este guia apresenta as etapas para consultar seus dados usando o ClickHouse e o catálogo SeaweedFS. O SeaweedFS é um armazenamento distribuído de arquivos e objetos de código aberto com um gateway compatível com S3. Seus S3 Table Buckets fornecem os dois componentes de uma implantação do Iceberg: o catálogo REST do Iceberg embutido fornece os metadados das tabelas, e o bucket de tabelas armazena os dados das tabelas como arquivos Parquet no mesmo endpoint S3:
  • Serviço único - os metadados do catálogo e os dados Parquet são fornecidos por um único processo, sem um banco de dados de metadados separado
  • Conformidade da API REST com a especificação do catálogo REST do Iceberg
  • Manutenção no servidor - compactação automática de arquivos Parquet e expiração de snapshots, sem serviço de manutenção externo
Como este recurso é experimental, você precisará ativá-lo usando: SET allow_experimental_database_iceberg = 1;

Configuração para desenvolvimento local

Para desenvolvimento e testes locais, você pode executar o SeaweedFS e o ClickHouse com o Docker Compose. Essa abordagem é ideal para aprendizado, prototipagem e ambientes de desenvolvimento.

Pré-requisitos

  1. Docker e Docker Compose: verifique se o Docker está instalado e em execução
  2. Versões: SeaweedFS 4.42 ou posterior; ClickHouse 26.8 ou posterior (as versões desde a 25.8 podem ler e inserir, mas a criação de tabelas pelo catálogo requer a versão 26.8)
  3. Python com PyIceberg (opcional): usado abaixo para inserir dados de exemplo

Configurar o catálogo local do SeaweedFS

Etapa 1: Crie uma nova pasta para executar o exemplo e, em seguida, crie um arquivo s3config.json com as credenciais do gateway S3 e do catálogo:
Etapa 2: Crie um arquivo docker-compose.yml com a seguinte configuração:
O comando mini inicia toda a stack do SeaweedFS em um único container. A flag -tableBucket=analytics cria antecipadamente um bucket do S3 Tables chamado analytics, que funciona como warehouse do Iceberg. Passo 3: Execute o seguinte comando para iniciar os serviços:

Inserindo dados de exemplo

O catálogo está inicialmente vazio. Crie uma tabela e acrescente algumas linhas usando o PyIceberg (pip install pyiceberg pyarrow):

Como se conectar ao catálogo local do SeaweedFS

Conecte-se ao contêiner do ClickHouse:
Em seguida, crie a conexão com o banco de dados no catálogo do SeaweedFS:
Os argumentos do engine contêm as credenciais do S3 usadas pelo ClickHouse para ler os dados da tabela, enquanto catalog_credential e oauth_server_uri autenticam no próprio catálogo por meio do fluxo OAuth2 de credenciais de cliente. O SeaweedFS aceita a mesma chave de acesso e chave secreta para ambos.

Consultando tabelas do catálogo do SeaweedFS com o ClickHouse

Agora que a conexão foi estabelecida, você pode começar a fazer consultas por meio do catálogo do SeaweedFS. Por exemplo:
Backticks obrigatóriosOs backticks são obrigatórios porque o ClickHouse não oferece suporte a mais de um espaço de nomes.
Para consultar uma tabela:

Criar tabelas e gravar dados do ClickHouse

Você também pode criar tabelas no catálogo do SeaweedFS e gravar dados nelas diretamente do ClickHouse:
A cláusula do engine IcebergS3 especifica o caminho de armazenamento da nova tabela, e write_full_path_in_iceberg_metadata faz com que o ClickHouse registre a localização completa da tabela no catálogo.
A criação de tabelas por meio de um catálogo requer o ClickHouse 26.8 ou posterior. As versões 26.4 a 26.7 gravam os arquivos da tabela antes de registrar o espaço de nomes, o que o SeaweedFS rejeita, a menos que o espaço de nomes já exista no catálogo; versões anteriores à 26.4 parecem funcionar, mas os arquivos da tabela são gravados no armazenamento de objetos sem serem registrados no catálogo.
Quando o ClickHouse confirma um insert, o catálogo do SeaweedFS corrige metadados que o writer experimental ainda não produz: preenche IDs de campo ausentes nos manifests, reescreve caminhos de arquivos relativos ao bucket como localizações absolutas e atribui um mapeamento de nomes padrão à tabela. Leitores rigorosos, como PyIceberg e Spark, podem então ler as linhas gravadas pelo ClickHouse. Isso requer o SeaweedFS 4.42 ou posterior.

Carregando dados do seu lago de dados para o ClickHouse

Se precisar carregar dados do catálogo do SeaweedFS no ClickHouse, comece criando uma tabela local no ClickHouse:
Em seguida, carregue os dados da tabela do catálogo do SeaweedFS usando um INSERT INTO SELECT:
Última modificação em 16 de agosto de 2026