Utiliser les fonctions de modèle¶
Pour permettre la concaténation d’identificateurs SQL tels que les noms de bases de données et les noms de schéma, et pour offrir une flexibilité dans l’utilisation d’identificateurs entre guillemets ou non dans différents contextes, Snowflake CLI fournit l’ensemble suivant de fonctions utilitaires que vous pouvez utiliser dans les modèles de définition de modèle de projet :
fn.concat_ids()
¶
Entrée : un ou plusieurs arguments de chaîne (ID SQL ou chaîne simple)
Sortie : un ID SQL valide (entre guillemets ou non)
La fonction fn.concat_ids()
concatène plusieurs arguments de chaîne en une seule chaîne représentant un ID SQL (entre guillemets ou non). Si l’une des chaînes d’entrée est un identificateur entre guillemets valide, il ne sera pas échappé avant la concaténation. La chaîne résultante est ensuite échappée et entre guillemets si elle contient des caractères sûrs non SQL ou si l’une des chaînes d’entrée était un identificateur entre guillemets valide.
Exemples :
Appel des sorties
fn.concat_ids('id1_', '"quoted_id2"')
"id1_quoted_id2"
car l’une des valeurs d’entrée est un identificateur entre guillemets.Appel des sorties
fn.concat_ids('id1_', 'id2')
id1_id2
car aucune des valeurs d’entrée n’est un identificateur entre guillemets et aucune des valeurs d’entrée ne contient de caractères sûrs non SQL.
fn.str_to_id()
¶
Entrée : un ou plusieurs arguments de chaîne (ID SQL ou chaîne simple)
Sortie : un ID SQL valide (entre guillemets ou non)
La fonction fn.str_to_id()
renvoie une chaîne sous forme d’ID. Si la chaîne d’entrée contient un identificateur valide entre guillemets ou sans guillemets, la fonction le renvoie tel quel. Cependant, si la chaîne d’entrée contient des caractères SQL non sûrs qui ne sont pas correctement placés entre guillemets, la fonction renvoie un ID entre guillemets qui échappe aux caractères non sûrs.
Exemples :
L’appel de
fn.str_to_id('id1')
renvoieid1
car c’est un identificateur valide sans guillemets.L’appel de
fn.str_to_id('unsafe"id')
renvoie"unsafe""id"
parce qu’il contient des caractères SQL non sûrs.
fn.id_to_str()
¶
Entrée : un argument de chaîne (ID SQL ou chaîne simple)
Sortie : une chaîne simple
Si l’entrée est un ID SQL valide, la fonction renvoie une chaîne simple non échappée. Sinon, la fonction renvoie la chaîne d’entrée telle quelle.
Exemples :
L’appel de
:fn.id_to_str('id1')
renvoieid1
car c’est déjà sans guillemets.L’appel de :codenowrap:` fn.id_to_str(“« quoted » »id.example »”)` renvoie
quoted"id.example
.
fn.get_username()
¶
Entrée : une chaîne facultative contenant la valeur de secours
Sortie : nom d’utilisateur actuel détecté à partir du système d’exploitation
Renvoie le nom d’utilisateur actuel à partir des variables d’environnement du système d’exploitation. Si le nom d’utilisateur actuel n’est pas trouvé ou est vide, il renverra une valeur vide ou utilisera la valeur de secours si elle est fournie.
Exemples :
fn.get_username('default_user')
renvoie le nom d’utilisateur actuel s’il est trouvé, sinon, il renvoiedefault_user
.
fn.sanitize_id()
¶
Entrée : un argument de chaîne
Sortie : un ID SQL valide non entre guillemets
La fonction fn.sanitize_id()
supprime tout caractère SQL non sûr de l’entrée et les renvoie sous forme d’ID SQL valide sans guillemets. Si le résultat ne commence pas par une lettre ou un trait de soulignement, un trait de soulignement lui est ajouté. Pour les chaînes très longues, la fonction tronque la chaîne à 255 caractères.
Exemples :
Lors de l’utilisation de
fn.sanitize_id('Some.id"With_Special_Chars')
, la sortie estSomeidWith_Special_Chars
.Lors de l’utilisation de
fn.sanitize_id('1abc')
, la sortie est_1abc
.
Exemple de cas d’utilisation¶
L’exemple suivant montre comment utiliser ces fonctions dans les fichiers de définition de projet snowflake.yml
:
definition_version: 2
entities:
pkg:
type: application package
identifier: <% fn.concat_ids(ctx.env.app_name, ctx.env.pkg_suffix) %>
artifacts:
- src: app/*
dest: ./
app:
type: application
identifier: <% fn.concat_ids(ctx.env.app_name, ctx.env.app_suffix) %>
env:
app_name: myapp_base_name_<% fn.sanitize_id(fn.get_username()) %>
app_suffix: _app_instance
pkg_suffix: _pkg
L’exemple suivant illustre comment utiliser les fonctions dans un fichier SQL :
DESC APPLICATION <% fn.str_to_id(ctx.entities.app.identifier) %>;
DESC APPLICATION PACKAGE <% fn.str_to_id(ctx.entities.pkg.identifier) %>;