Alternativas a los procedimientos almacenados en ClickHouse
IF/ELSE, bucles, etc.).
Se trata de una decisión de diseño deliberada, basada en la arquitectura de ClickHouse como base de datos analítica.
Los bucles se desaconsejan en las bases de datos analíticas porque procesar O(n) consultas simples suele ser más lento que procesar un menor número de consultas complejas.
ClickHouse está optimizado para:
- Cargas de trabajo analíticas - Agregaciones complejas sobre grandes conjuntos de datos
- Procesamiento por lotes - Procesamiento eficiente de grandes volúmenes de datos
- Consultas declarativas - Consultas SQL que describen qué datos recuperar, no cómo procesarlos
Funciones definidas por el usuario (UDFs)
UDFs basadas en lambda
Datos de muestra para los ejemplos
Datos de muestra para los ejemplos
- No hay bucles ni flujos de control complejos
- No se pueden modificar datos (
INSERT/UPDATE/DELETE) - No se permiten funciones recursivas
CREATE FUNCTION para ver la sintaxis completa.
UDF ejecutables
Vistas parametrizadas
Datos de ejemplo
Datos de ejemplo
Casos de uso comunes
- Filtrado dinámico por rango de fechas
- Segmentación de datos por usuario
- Acceso a datos multi-tenant
- Plantillas de informes
- Enmascaramiento de datos
Vistas materializadas
Vistas materializadas actualizables
Orquestación externa
Uso del código de la aplicación
- Procedimiento almacenado de MySQL
- Código de aplicación de ClickHouse
Diferencias clave
- Flujo de control - Los procedimientos almacenados de MySQL usan
IF/ELSEy buclesWHILE. En ClickHouse, implemente esta lógica en el código de su aplicación (Python, Java, etc.) - Transacciones - MySQL admite
BEGIN/COMMIT/ROLLBACKpara transacciones ACID. ClickHouse es una base de datos analítica optimizada para cargas de trabajo de solo inserción, no para actualizaciones transaccionales - Actualizaciones - MySQL usa sentencias
UPDATE. ClickHouse prefiereINSERTcon ReplacingMergeTree o CollapsingMergeTree para datos mutables - Variables y estado - Los procedimientos almacenados de MySQL pueden declarar variables (
DECLARE v_discount). Con ClickHouse, gestione el estado en el código de su aplicación - Gestión de errores - MySQL admite
SIGNALy manejadores de excepciones. En el código de la aplicación, use la gestión de errores nativa de su lenguaje (try/catch)
Uso de herramientas de orquestación de flujos de trabajo
- Apache Airflow - Programa y supervisa DAG complejos de consultas de ClickHouse
- dbt - Transforma datos con flujos de trabajo basados en SQL
- Prefect/Dagster - Orquestación moderna basada en Python
- Planificadores personalizados - Tareas cron, Kubernetes CronJobs, etc.
- Capacidades completas de un lenguaje de programación
- Mejor gestión de errores y lógica de reintento
- Integración con sistemas externos (API, otras bases de datos)
- Control de versiones y pruebas
- Monitorización y alertas
- Programación más flexible
Alternativas a las sentencias preparadas en ClickHouse
Sintaxis
Método 1: usar SET
Tabla y datos de ejemplo
Tabla y datos de ejemplo
Método 2: uso de parámetros de la CLI
Sintaxis de los parámetros
{parameter_name: DataType}
parameter_name- El nombre del parámetro (sin el prefijoparam_)DataType- El tipo de dato de ClickHouse al que se convierte el parámetro
Ejemplos de tipos de datos
Tablas y datos de muestra para el ejemplo
Tablas y datos de muestra para el ejemplo
- Cadenas & números
- Fechas & horas
- Arrays
- Maps
- Identificadores
Para usar parámetros de consulta en clientes para lenguajes, consulta la documentación del cliente del lenguaje específico que te interese.
Limitaciones de los parámetros de consulta
- Están destinados principalmente a las sentencias SELECT; la mejor compatibilidad se da en las consultas SELECT
- Funcionan como identificadores o literales; no pueden sustituir fragmentos arbitrarios de SQL
- Tienen compatibilidad limitada con DDL; se admiten en
CREATE TABLE, pero no enALTER TABLE
Buenas prácticas de seguridad
Sentencias preparadas del protocolo MySQL
COM_STMT_PREPARE, COM_STMT_EXECUTE, COM_STMT_CLOSE), principalmente para permitir la conexión con herramientas como Tableau Online que encapsulan consultas en sentencias preparadas.
Limitaciones clave:
- No se admite la vinculación de parámetros - No puedes usar marcadores de posición
?con parámetros vinculados - Las consultas se almacenan, pero no se analizan durante
PREPARE - La implementación es mínima y está pensada para la compatibilidad con herramientas de BI específicas
Resumen
Alternativas de ClickHouse frente a los procedimientos almacenados
Uso de los parámetros de consulta
- Prevenir la inyección SQL
- Consultas parametrizadas con seguridad de tipos
- Filtrado dinámico en aplicaciones
- Plantillas de consulta reutilizables
CREATE FUNCTION- Funciones definidas por el usuarioCREATE VIEW- Vistas, incluidas las parametrizadas y las materializadas- Sintaxis SQL - Parámetros de consulta - Sintaxis completa de los parámetros de consulta
- Vistas materializadas en cascada - Patrones avanzados de vistas materializadas
- UDF ejecutables - Ejecución de funciones externas