- À l’aide de SQL
- À l’aide de l’UI et de votre propre code (Public Beta)
- À l’aide de la Cloud API (Beta)
- À l’aide de Terraform (alpha)
Fonctions SQL définies par l’utilisateur
CREATE FUNCTION à partir d’une expression lambda.
Dans cet exemple, nous allons créer une simple fonction exécutable définie par l’utilisateur, isBusinessHours.
La fonction vérifiera si un timestamp donné correspond aux heures ouvrées habituelles et renverra true si c’est le cas, sinon false.
- Connectez-vous à Cloud Console et ouvrez la console SQL
- Écrivez la SQL query suivante pour créer la fonction
isBusinessHours:
- Exécutez ce qui suit pour tester l’UDF que vous venez de créer :
- Vous pouvez utiliser la commande
DROP FUNCTIONpour supprimer l’UDF que vous venez de créer :
- Les paramètres de session (définis via l’instruction
SET) ne sont pas transmis au contexte d’exécution des UDFs - Les paramètres du profil utilisateur ne sont pas hérités par les UDFs
- Les paramètres au niveau de la requête ne s’appliquent pas lors de l’exécution des UDFs
Fonctions définies par l’utilisateur créées via l’UI
isBusinessHours, qui vérifie si un timestamp donné se situe dans les heures ouvrées habituelles.
Nous l’avons précédemment créée en SQL, mais cette fois, nous allons la créer en Python et la configurer via l’UI.
1
Créer le fichier Python
Créez un nouveau fichier Si votre script Python importe des paquets tiers, indiquez-les dans un fichier
main.py localement :requirements.txt, et ClickHouse Cloud les installera pour vous. Vous pouvez aussi inclure directement les dépendances dans l’archive ZIP, mais vous devrez alors fournir les paquets mis en cache pour les deux architectures CPU ; requirements.txt reste donc la solution la plus simple. Par exemple :ClickHouse Cloud s’attend à trouver
main.py dans l’archive zip que vous téléverserez via l’UI à l’étape suivante.
Si vous donnez un autre nom au fichier, une erreur se produira.2
Dépendances regroupées et fichiers locaux
Pour inclure les paquets de dépendances et tout autre fichier local (par exemple, des fichiers wheel, des fichiers de configuration ou des fichiers de données), placez-les dans le même répertoire que Vous pouvez référencer, dans votre code Python, le répertoire de base du chemin local inclus en utilisant Cela est utile lorsque vous devez :
main.py et requirements.txt. Lorsque vous créez l’archive ZIP, incluez tous les fichiers :os.path.dirname(os.path.abspath(__file__)). Cela renvoie le chemin absolu du répertoire où se trouve votre main.py dans l’archive ZIP, ce qui vous permet d’accéder aux autres fichiers inclus :- Accéder aux fichiers de configuration inclus avec votre UDF
- Charger des packages wheel pour des dépendances personnalisées
- Référencer des scripts supplémentaires ou des fichiers de données
3
Créer une UDF via l’UI
- Depuis la page d’accueil de la console Cloud, cliquez sur le nom de votre organisation dans le menu en bas à gauche.
- Sélectionnez Fonctions définies par l’utilisateur dans le menu.
- Sur la page des fonctions définies par l’utilisateur, cliquez sur Configurer une UDF. Un panneau de configuration s’ouvre sur la droite de l’écran.
- Saisissez un nom de fonction. Pour cet exemple, utilisez
isBusinessHours. - Sélectionnez un type de fonction, Executable pool ou Executable :
- Executable pool : un pool de processus persistants est maintenu, et un processus est prélevé dans ce pool pour effectuer les lectures.
- Executable : le script s’exécute à chaque requête.
- Pour cet exemple, utilisez les paramètres par défaut. Pour obtenir la liste complète des paramètres de configuration, consultez Executable user-defined functions.
- Cliquez sur Parcourir le fichier pour téléverser le fichier
.zipcréé au début de ce tutoriel. - Ajoutez un nouvel argument. Pour cet exemple, ajoutez un argument
timestampde typeDateTime. - Sélectionnez un type de retour. Pour cet exemple, sélectionnez
Bool. - Cliquez sur Créer une UDF. Une boîte de dialogue affiche l’état actuel du build.
- En cas de problème, l’état devient error.
- Sinon, l’état passe de building à provisioning. Votre service doit être actif pour terminer le provisionnement. Si votre service est inactif, cliquez sur Réveiller le service dans le panneau Détails de l’UDF à côté du nom du service.
- Une fois l’opération terminée, l’état devient deployed.
4
Testez votre UDF
- revenez à la page d’accueil de la SQL Console en cliquant sur Settings - return to your service view dans le coin supérieur gauche de la page
- cliquez sur SQL Console dans le menu de gauche
- saisissez la requête suivante :
5
Créer une nouvelle version
Pour modifier le code d’une UDF, créez une nouvelle version. Le panneau Edit sert uniquement à gérer les services auxquels une UDF est affectée ; y téléverser un fichier ne remplacera pas le code déployé.
- Depuis la page d’accueil de la console Cloud, cliquez sur le nom de votre organisation dans le menu en bas à gauche.
- Sélectionnez User-defined functions dans le menu.
- Cliquez sur les trois points sous Actions pour la UDF
isBusinessHours, puis sur Create new version - Téléversez un fichier zip contenant le code modifié, ou modifiez les paramètres, puis cliquez sur Create new version
Gérer les UDF avec l’API Cloud
Ces endpoints sont en bêta et le contrat de l’API est susceptible d’évoluer.
- Créez une URL de téléversement afin d’obtenir une URL présignée pour téléverser un fichier
application/zip, puis téléversez-y votre archive ZIP. Chaque ID de téléversement ne peut être utilisé que pour une seule tentative de création ou de création de version ; demandez une nouvelle URL de téléversement lors d’une nouvelle tentative. - Créez l’UDF à partir de l’archive téléversée, en spécifiant le nom de la fonction, le runtime, les arguments et le type de retour.
- Associez l’UDF à un service. Si la version est omise, la dernière version prête est associée. Le service doit être en cours d’exécution ; les services inactifs peuvent d’abord être réactivés.
Consultez la référence de l’API UDF pour les schémas de requête et de réponse.
Gérer les UDF avec Terraform
clickhouse_udfgère la fonction elle-même. Cette ressource accepte une archive ZIP contenant le code source de la fonction et publie une nouvelle version chaque fois que le hash de l’archive change, en attendant la fin du build.clickhouse_udf_attachmentattache une version d’UDF à un service. Un service ne peut utiliser qu’une seule version d’une fonction à la fois. Vous pouvez épingler un numéro de version fixe ou référencerclickhouse_udf.<name>.versionpour mettre automatiquement à jour les services vers la dernière version.
Ces ressources sont disponibles à partir de la version 3.24.0 du provider. Elles sont au statut alpha et leur comportement peut changer dans les prochaines versions du provider.
isBusinessHours de l’exemple précédent :
clickhouse_udf supprime toutes les versions de la FUNCTION et la détache de tous les services.