Uso das funções de modelo¶
Para permitir a concatenação de identificadores SQL, como nomes de banco de dados e nomes de esquema, e fornecer flexibilidade no uso de identificadores entre aspas ou sem aspas em diferentes contextos, Snowflake CLI fornece o seguinte conjunto de funções utilitárias que você pode usar em modelos de definição de modelo de projeto:
fn.concat_ids()
¶
Entrada: um ou mais argumentos de cadeia de caracteres (ID SQL ou cadeia de caracteres simples)
Saída: um ID SQL válido (entre aspas ou não)
A função fn.concat_ids()
concatena vários argumentos de cadeia de caracteres em uma única cadeia de caracteres que representa um ID SQL (entre aspas ou não). Se qualquer uma das cadeias de caracteres de entrada for um identificador válido entre aspas, ele não será escapado antes da concatenação. A cadeia de caracteres resultante é então escapada e colocada entre aspas se contiver caracteres não seguros para SQL ou se qualquer uma das cadeias de caracteres de entrada for um identificador entre aspas válido.
Exemplos:
Chamar
fn.concat_ids('id1_', '"quoted_id2"')
retorna"id1_quoted_id2"
porque um dos valores de entrada é um identificador entre aspas.Chamar
fn.concat_ids('id1_', 'id2')
resulta emid1_id2
porque nenhum dos valores de entrada é um identificador entre aspas e nenhum dos valores de entrada contém caracteres não seguros para SQL.
fn.str_to_id()
¶
Entrada: um ou mais argumentos de cadeia de caracteres (ID SQL ou cadeia de caracteres simples)
Saída: um ID SQL válido (entre aspas ou não)
A função fn.str_to_id()
resulta uma cadeia de caracteres como um ID. Se a cadeia de caracteres de entrada contiver um identificador válido entre aspas ou sem aspas, a função retornará como está. Entretanto, se a cadeia de caracteres de entrada contiver caracteres não seguros para SQL que não estejam corretamente entre aspas, a função retornará uma ID entre aspas que escapa os caracteres não seguros.
Exemplos:
Chamar
fn.str_to_id('id1')
retornaid1
porque ele é um identificador válido sem aspas.Chamar
fn.str_to_id('unsafe"id')
retorna"unsafe""id"
porque ele contém caracteres não seguros para SQL.
fn.id_to_str()
¶
Entrada: um argumento de cadeia de caracteres (ID SQL ou cadeia de caracteres simples)
Saída: uma cadeia de caracteres simples
Se a entrada for um ID SQL válido, a função retornará uma cadeia de caracteres simples sem escape. Caso contrário, a função retorna a cadeia de caracteres de entrada como está.
Exemplos:
Chamar
:fn.id_to_str('id1')
retornaid1
porque já está sem aspas.Chamar :codenowrap:` fn.id_to_str(“«quoted»»id.example»”)` retorna
quoted"id.example
.
fn.get_username()
¶
Entrada: uma cadeia de caracteres opcional com o valor de fallback
Saída: nome de usuário atual detectado no sistema operacional
Retorna o nome de usuário atual das variáveis de ambiente do sistema operacional. Se o nome de usuário atual não for encontrado ou estiver vazio, um valor vazio será retornado ou o valor de fallback será usado, se algum for fornecido.
Exemplos:
fn.get_username('default_user')
retorna o nome de usuário atual, se encontrado, caso contrário,default_user
é retornado.
fn.sanitize_id()
¶
Entrada: um argumento de cadeia de caracteres
Saída: um ID SQL válido sem aspas
A função fn.sanitize_id()
remove quaisquer caracteres não seguros para SQL da entrada e a retorna como um ID SQL válido sem aspas. Se o resultado não começar com uma letra ou um sublinhado, um sublinhado será anexado a ele. Para cadeias de caracteres muito longas, a função trunca a cadeia de caracteres para 255 caracteres.
Exemplos:
Ao usar
fn.sanitize_id('Some.id"With_Special_Chars')
a saída éSomeidWith_Special_Chars
.Ao usar
fn.sanitize_id('1abc')
a saída é_1abc
.
Amostra de caso de uso¶
O exemplo a seguir mostra como usar essas funções nos arquivos de definição de projeto 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
O exemplo a seguir ilustra como usar as funções em um arquivo SQL:
DESC APPLICATION <% fn.str_to_id(ctx.entities.app.identifier) %>;
DESC APPLICATION PACKAGE <% fn.str_to_id(ctx.entities.pkg.identifier) %>;