Pular para o conteúdo principal
Se você vem de um banco de dados relacional tradicional, talvez esteja procurando procedimentos armazenados e instruções preparadas no ClickHouse. Este guia explica a abordagem do ClickHouse para esses conceitos e fornece alternativas recomendadas.

Alternativas aos procedimentos armazenados no ClickHouse

O ClickHouse não oferece suporte a procedimentos armazenados tradicionais com lógica de controle de fluxo (IF/ELSE, loops etc.). Essa é uma decisão de design intencional, baseada na arquitetura do ClickHouse como um banco de dados analítico. Loops não são recomendados em bancos de dados analíticos porque processar O(n) consultas simples geralmente é mais lento do que processar um número menor de consultas complexas. O ClickHouse é otimizado para:
  • Cargas de trabalho analíticas - Agregações complexas em grandes conjuntos de dados
  • Processamento em lote - Processamento eficiente de grandes volumes de dados
  • Consultas declarativas - Consultas SQL que descrevem quais dados recuperar, e não como processá-los
Procedimentos armazenados com lógica procedural vão contra essas otimizações. Em vez disso, o ClickHouse oferece alternativas alinhadas aos seus pontos fortes.

Funções Definidas pelo Usuário (UDFs)

As Funções Definidas pelo Usuário permitem encapsular lógica reutilizável sem controle de fluxo. O ClickHouse oferece dois tipos:

UDFs baseadas em lambda

Crie funções usando expressões SQL e sintaxe de lambda:
Limitações:
  • Sem loops nem fluxo de controle complexo
  • Não podem modificar dados (INSERT/UPDATE/DELETE)
  • Funções recursivas não são permitidas
Consulte CREATE FUNCTION para a sintaxe completa.

UDFs executáveis

Para lógicas mais complexas, use UDFs executáveis que chamam programas externos:
UDFs executáveis podem implementar qualquer lógica em qualquer linguagem (Python, Node.js, Go etc.). Consulte UDFs executáveis para mais detalhes.

Views parametrizadas

Views parametrizadas funcionam como funções que retornam conjuntos de dados. Elas são ideais para consultas reutilizáveis com filtragem dinâmica:

Casos de uso comuns

Veja a seção Views parametrizadas para mais informações.

Visões materializadas

Visões materializadas são ideais para pré-calcular agregações de alto custo que, tradicionalmente, seriam feitas em procedimentos armazenados. Se você está acostumado a um banco de dados tradicional, pense em uma visão materializada como um trigger de INSERT que transforma e agrega dados automaticamente à medida que eles são inseridos na tabela de origem:

Visões materializadas atualizáveis

Para processamento em lote agendado (como procedimentos armazenados executados à noite):
Consulte Visões materializadas em cascata para ver padrões avançados.

Orquestração externa

Para lógica de negócios complexa, fluxos de trabalho de ETL ou processos com várias etapas, sempre é possível implementar a lógica fora do ClickHouse, usando clientes em diferentes linguagens.

Usando código da aplicação

Veja, lado a lado, como um procedimento armazenado do MySQL pode ser implementado em código da aplicação com ClickHouse:

Principais diferenças

  1. Fluxo de controle - Procedimentos armazenados do MySQL usam IF/ELSE e loops WHILE. No ClickHouse, implemente essa lógica no código da aplicação (Python, Java etc.)
  2. Transações - O MySQL oferece suporte a BEGIN/COMMIT/ROLLBACK para transações ACID. O ClickHouse é um banco de dados analítico otimizado para cargas de trabalho append-only, não para atualizações transacionais
  3. Atualizações - O MySQL usa instruções UPDATE. O ClickHouse prefere INSERT com ReplacingMergeTree ou CollapsingMergeTree para dados mutáveis
  4. Variáveis e estado - Procedimentos armazenados do MySQL podem declarar variáveis (DECLARE v_discount). No ClickHouse, gerencie o estado no código da aplicação
  5. Tratamento de erros - O MySQL oferece suporte a SIGNAL e manipuladores de exceção. No código da aplicação, use o tratamento de erros nativo da sua linguagem (try/catch)
Quando usar cada abordagem:
  • Cargas de trabalho OLTP (pedidos, pagamentos, contas de usuário) → Use MySQL/PostgreSQL com procedimentos armazenados
  • Cargas de trabalho analíticas (relatórios, agregações, séries temporais) → Use ClickHouse com orquestração da aplicação
  • Arquitetura híbrida → Use os dois! Envie dados transacionais do OLTP para o ClickHouse para análises

Uso de ferramentas de orquestração de fluxos de trabalho

  • Apache Airflow - Agendamento e monitoramento de DAGs complexos de consultas do ClickHouse
  • dbt - Transformação de dados com fluxos de trabalho baseados em SQL
  • Prefect/Dagster - Orquestração moderna baseada em Python
  • Agendadores personalizados - Cron jobs, Kubernetes CronJobs etc.
Benefícios da orquestração externa:
  • Todos os recursos de uma linguagem de programação
  • Melhor tratamento de erros e lógica de retentativa
  • Integração com sistemas externos (APIs, outros bancos de dados)
  • Controle de versão e testes
  • Monitoramento e alertas
  • Agendamento mais flexível

Alternativas a instruções preparadas no ClickHouse

Embora o ClickHouse não tenha “instruções preparadas” tradicionais no sentido de um SGBDR, ele oferece parâmetros de consulta que cumprem a mesma função: consultas parametrizadas e seguras que evitam injeção de SQL.

Sintaxe

Há duas formas de definir parâmetros de consulta:

Método 1: usando SET

Método 2: usando parâmetros da CLI

Sintaxe dos parâmetros

Os parâmetros são referenciados da seguinte forma: {parameter_name: DataType}
  • parameter_name - O nome do parâmetro (sem o prefixo param_)
  • DataType - O tipo de dado do ClickHouse para o qual o parâmetro será convertido

Exemplos de tipos de dados


Para usar parâmetros de consulta em clientes para linguagens, consulte a documentação do cliente da linguagem específica que interessa a você.

Limitações dos parâmetros de consulta

Parâmetros de consulta não são substituições de texto de uso geral. Eles têm limitações específicas:
  1. Destinam-se principalmente a instruções SELECT - o melhor suporte está em consultas SELECT
  2. Eles funcionam como identificadores ou literais - não podem substituir fragmentos arbitrários de SQL
  3. Eles têm suporte limitado para DDL - são compatíveis com CREATE TABLE, mas não com ALTER TABLE
O que FUNCIONA:
O que NÃO funciona:

Práticas recomendadas de segurança

Sempre use parâmetros de consulta para dados fornecidos pelo usuário:
Valide os tipos de entrada:

Instruções preparadas no protocolo MySQL

A interface MySQL do ClickHouse inclui suporte mínimo a instruções preparadas (COM_STMT_PREPARE, COM_STMT_EXECUTE, COM_STMT_CLOSE), principalmente para permitir a conexão com ferramentas como o Tableau Online, que encapsulam consultas em instruções preparadas. Principais limitações:
  • A vinculação de parâmetros não é compatível - Você não pode usar placeholders ? com parâmetros vinculados
  • As consultas são armazenadas, mas não são analisadas durante o PREPARE
  • A implementação é mínima e foi projetada para compatibilidade com ferramentas de BI específicas
Exemplo do que não funciona:
Use os parâmetros de consulta nativos do ClickHouse em vez disso. Eles oferecem suporte completo à vinculação de parâmetros, segurança de tipos e proteção contra injeção de SQL em todas as interfaces do ClickHouse:
Para mais detalhes, consulte a documentação da interface MySQL e o post do blog sobre suporte a MySQL.

Resumo

Alternativas do ClickHouse aos procedimentos armazenados

Uso de parâmetros de consulta

Os parâmetros de consulta podem ser usados para:
  • Evitar injeção de SQL
  • Consultas parametrizadas com segurança de tipos
  • Filtragem dinâmica em aplicações
  • Templates de consulta reutilizáveis
Última modificação em 19 de junho de 2026