Alternatives aux procédures stockées dans ClickHouse
IF/ELSE, boucles, etc.).
Il s’agit d’un choix de conception délibéré, lié à l’architecture de ClickHouse en tant que base de données analytique.
Les boucles sont déconseillées dans les bases de données analytiques, car exécuter O(n) requêtes simples est généralement plus lent qu’exécuter un plus petit nombre de requêtes complexes.
ClickHouse est optimisé pour :
- Charges de travail analytiques - Des agrégations complexes sur de grands jeux de données
- Traitement par lots - Le traitement efficace de grands volumes de données
- Requêtes déclaratives - Des requêtes SQL qui décrivent quelles données récupérer, et non comment les traiter
Fonctions définies par l’utilisateur (UDFs)
UDF basées sur des expressions lambda
Données d’exemple
Données d’exemple
- Pas de boucles ni de structures de contrôle complexes
- Impossible de modifier les données (
INSERT/UPDATE/DELETE) - Les fonctions récursives ne sont pas autorisées
CREATE FUNCTION pour la syntaxe complète.
UDF exécutables
Vues paramétrées
Exemple de données
Exemple de données
Cas d’usage courants
- Filtrage dynamique par plage de dates
- Segmentation des données par utilisateur
- Accès aux données multi-tenant
- Modèles de rapports
- Masquage des données
Vues matérialisées
Vues matérialisées actualisables
Orchestration externe
Utiliser du code applicatif
- Procédure stockée sous MySQL
- Code d’application pour ClickHouse
Différences clés
- Contrôle de flux - Les procédures stockées MySQL utilisent
IF/ELSEet des bouclesWHILE. Dans ClickHouse, implémentez cette logique dans le code de votre application (Python, Java, etc.) - Transactions - MySQL prend en charge
BEGIN/COMMIT/ROLLBACKpour les transactions ACID. ClickHouse est une base de données analytique optimisée pour les workloads de type append-only, et non pour les mises à jour transactionnelles - Mises à jour - MySQL utilise des instructions
UPDATE. ClickHouse privilégieINSERTavec ReplacingMergeTree ou CollapsingMergeTree pour les données mutables - Variables et état - Les procédures stockées MySQL peuvent déclarer des variables (
DECLARE v_discount). Avec ClickHouse, gérez l’état dans le code de votre application - Gestion des erreurs - MySQL prend en charge
SIGNALet les gestionnaires d’exceptions. Dans le code de l’application, utilisez le mécanisme natif de gestion des erreurs de votre langage (try/catch)
Utilisation d’outils d’orchestration de workflows
- Apache Airflow - Planifier et surveiller des DAG complexes de requêtes ClickHouse
- dbt - Transformer les données avec des workflows basés sur SQL
- Prefect/Dagster - Orchestration moderne basée sur Python
- Custom schedulers - Tâches cron, Kubernetes CronJobs, etc.
- Toutes les capacités d’un langage de programmation complet
- Meilleure gestion des erreurs et logique de retry
- Intégration avec des systèmes externes (API, autres bases de données)
- Contrôle de version et tests
- Monitoring et alertes
- Planification plus flexible
Alternatives aux requêtes préparées dans ClickHouse
Syntaxe
Méthode 1 : utilisation de SET
Exemple de table et de données
Exemple de table et de données
Méthode 2 : utiliser des paramètres CLI
Syntaxe des paramètres
{parameter_name: DataType}
parameter_name- Le nom du paramètre (sans le préfixeparam_)DataType- Le type de données ClickHouse vers lequel caster le paramètre
Exemples de types de données
Tables et données d’exemple
Tables et données d’exemple
- Chaînes et nombres
- Dates et heures
- Arrays
- Maps
- Identifiants
Pour l’utilisation des paramètres de requête dans les clients par langage, consultez la documentation du client pour le langage qui vous intéresse.
Limitations des paramètres de requête
- Ils sont principalement conçus pour les instructions SELECT - la meilleure prise en charge concerne les requêtes SELECT
- Ils fonctionnent comme des identifiants ou des littéraux - ils ne peuvent pas remplacer des fragments SQL arbitraires
- La prise en charge du DDL est limitée - ils sont pris en charge dans
CREATE TABLE, mais pas dansALTER TABLE
Bonnes pratiques de sécurité
Requêtes préparées du protocole MySQL
COM_STMT_PREPARE, COM_STMT_EXECUTE, COM_STMT_CLOSE), principalement pour assurer la compatibilité avec des outils comme Tableau Online qui encapsulent les requêtes dans des requêtes préparées.
Limites principales :
- La liaison des paramètres n’est pas prise en charge - Vous ne pouvez pas utiliser de marqueurs
?avec des paramètres liés - Les requêtes sont stockées, mais non analysées lors de
PREPARE - L’implémentation est minimale et conçue pour la compatibilité avec certains outils de BI
Résumé
Alternatives de ClickHouse aux procédures stockées
Utilisation des paramètres de requête
- Prévenir les injections SQL
- Effectuer des requêtes paramétrées avec vérification des types
- Mettre en place un filtrage dynamique dans les applications
- Créer des modèles de requêtes réutilisables
CREATE FUNCTION- Fonctions définies par l’utilisateurCREATE VIEW- Vues, y compris les vues paramétrées et matérialisées- Syntaxe SQL - Paramètres de requête - Syntaxe complète des paramètres
- Vues matérialisées en cascade - Modèles avancés de vues matérialisées
- UDF exécutables - Exécution de fonctions externes