Alternativas aos procedimentos armazenados no ClickHouse
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
Funções Definidas pelo Usuário (UDFs)
UDFs baseadas em lambda
Dados de exemplo para os exemplos
Dados de exemplo para os exemplos
- Sem loops nem fluxo de controle complexo
- Não podem modificar dados (
INSERT/UPDATE/DELETE) - Funções recursivas não são permitidas
CREATE FUNCTION para a sintaxe completa.
UDFs executáveis
Views parametrizadas
Dados de exemplo
Dados de exemplo
Casos de uso comuns
- Filtragem dinâmica por intervalo de datas
- Segmentação de dados por usuário
- Acesso a dados em ambiente multilocatário
- Modelos de relatório
- Mascaramento de dados
Visões materializadas
Visões materializadas atualizáveis
Orquestração externa
Usando código da aplicação
- Procedimento armazenado no MySQL
- Código de aplicação do ClickHouse
Principais diferenças
- Fluxo de controle - Procedimentos armazenados do MySQL usam
IF/ELSEe loopsWHILE. No ClickHouse, implemente essa lógica no código da aplicação (Python, Java etc.) - Transações - O MySQL oferece suporte a
BEGIN/COMMIT/ROLLBACKpara transações ACID. O ClickHouse é um banco de dados analítico otimizado para cargas de trabalho append-only, não para atualizações transacionais - Atualizações - O MySQL usa instruções
UPDATE. O ClickHouse prefereINSERTcom ReplacingMergeTree ou CollapsingMergeTree para dados mutáveis - 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 - Tratamento de erros - O MySQL oferece suporte a
SIGNALe manipuladores de exceção. No código da aplicação, use o tratamento de erros nativo da sua linguagem (try/catch)
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.
- 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
Sintaxe
Método 1: usando SET
Tabela de exemplo e dados
Tabela de exemplo e dados
Método 2: usando parâmetros da CLI
Sintaxe dos parâmetros
{parameter_name: DataType}
parameter_name- O nome do parâmetro (sem o prefixoparam_)DataType- O tipo de dado do ClickHouse para o qual o parâmetro será convertido
Exemplos de tipos de dados
Tabelas e dados de amostra deste exemplo
Tabelas e dados de amostra deste exemplo
- Strings & Números
- Datas & Horários
- Arrays
- Maps
- Identificadores
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
- Destinam-se principalmente a instruções SELECT - o melhor suporte está em consultas SELECT
- Eles funcionam como identificadores ou literais - não podem substituir fragmentos arbitrários de SQL
- Eles têm suporte limitado para DDL - são compatíveis com
CREATE TABLE, mas não comALTER TABLE
Práticas recomendadas de segurança
Instruções preparadas no protocolo MySQL
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
Resumo
Alternativas do ClickHouse aos procedimentos armazenados
Uso de parâmetros de consulta
- Evitar injeção de SQL
- Consultas parametrizadas com segurança de tipos
- Filtragem dinâmica em aplicações
- Templates de consulta reutilizáveis
CREATE FUNCTION- Funções Definidas pelo UsuárioCREATE VIEW- Views, incluindo parametrizadas e materializadas- Sintaxe SQL - Parâmetros de consulta - Sintaxe completa dos parâmetros
- Visões materializadas em cascata - Padrões avançados de visões materializadas
- UDFs executáveis - Execução de funções externas