Funções definidas pelo usuário e procedimentos armazenados no compartilhamento declarativo no Native Application Framework¶
Os Declarative Native Apps podem incluir procedimentos armazenados e funções definidas pelo usuário (User-Defined Functions, UDFs) para consultar, visualizar e explorar dados. Este tópico descreve como incluir esses objetos em seu app.
Funções definidas pelo usuário e procedimentos armazenados compatíveis¶
Você pode compartilhar os seguintes tipos de funções definidas pelo usuário (UDFs) e procedimentos armazenados (sprocs) em um Declarative Native App:
Procedimentos armazenados com OWNERS RIGHTS ou RESTRICTED CALLERS RIGHTS. Para
obter mais informações, consulte Procedimentos armazenados com direitos do autor da chamada e direitos do proprietário.
Todos os tipos de UDFs, exceto funções EXTERNAL
Inclusão de funções definidas pelo usuário e procedimentos armazenados em seu aplicativo¶
Para incluir UDFs e procedimentos armazenados em seu Declarative Native App, adicione os nomes dos objetos e as respectivas permissões ao arquivo manifest.yaml. Você não precisa adicionar os objetos usando arquivos separados, como faz com os notebooks.
O exemplo a seguir mostra como incluir uma UDF e um procedimento armazenado no arquivo manifest.yaml:
manifest_version: 2
roles:
- ANALYST:
comment: "The ANALYST role provides access to logic objects."
shared_content:
databases:
- SNAF_POPULATION_DB:
schemas:
- LOGIC_SCHEMA:
roles: [ANALYST]
functions:
- POPULATION_ANALYSIS_FUNCTION(NUMBER):
roles: [ANALYST]
procedures:
- POPULATION_ANALYSIS_PROCEDURE():
roles: [ANALYST]
Neste exemplo, a UDF POPULATION_ANALYSIS_FUNCTION e o procedimento armazenado POPULATION_ANALYSIS_PROCEDURE estão incluídos no arquivo manifest.yaml. A função ANALYST do app recebe acesso a ambos os objetos.
Referência do manifesto¶
Esse recurso adiciona os seguintes campos ao arquivo manifest.yaml:
Campo functions.{named function}¶
Cada função nomeada (lista, [OneOfRequired] obrigatório): oferece suporte ao seguinte par nome-valor:
roles(lista, opcional): Uma lista de funções de app que podem acessar a função, por exemplo,[analyst]. Quando este campo está vazio ([]) ou omitido, somente proprietários e funções de aplicativos com IMPORTED PRIVILEGES concedidos recebem acesso. As funções incluídas devem ser definidas no campo de funções de nível superior e incluídas no campo {named schema}.roles.
Campo procedures.{named procedure}¶
Cada procedimento armazenado nomeado (lista, [OneOfRequired] obrigatório): oferece suporte ao seguinte par nome-valor:
roles(lista, opcional): Uma lista de funções de app que podem acessar o procedimento, por exemplo,[analyst]. Quando este campo está vazio ([]) ou omitido, somente proprietários e funções de aplicativos com IMPORTED PRIVILEGES concedidos recebem acesso. As funções incluídas devem ser definidas no campo de funções de nível superior e incluídas no campo {named schema}.roles.
Exemplo do arquivo de manifesto¶
O bloco de código a seguir é um exemplo de arquivo de manifesto do Declarative Native App.
Observe que os objetos de dados e de código devem estar em esquemas diferentes.
manifest_version: 2
roles:
- VIEWER:
comment: "The VIEWER role provides access to only one view."
- ANALYST:
comment: "The ANALYST role provides access to views, the table, and logic."
shared_content:
databases:
- SNAF_POPULATION_DB:
schemas:
- DATA_SCHEMA:
roles: [VIEWER, ANALYST]
tables:
- COUNTRY_POP_BY_YEAR:
roles: [ANALYST]
views:
- COUNTRY_POP_BY_YEAR_2000:
roles: [VIEWER, ANALYST]
- LOGIC_SCHEMA:
roles: [ANALYST]
functions:
- POPULATION_ANALYSIS_FUNCTION(NUMBER):
roles: [ANALYST]
procedures:
- POPULATION_ANALYSIS_PROCEDURE():
roles: [ANALYST]
application_content:
notebooks:
- intro_notebook:
roles: [VIEWER, ANALYST]
main_file: INTRO_NB.ipynb
- analyst_notebook:
roles: [ANALYST]
main_file: ANALYST_NB.ipynb
Limitações¶
- Linguagens e tipos compatíveis
UDFs e procedimentos armazenados do Snowpark escritos em Python, Java, Javascript e Scala. Funções do Snowpark Container Services não são compatíveis.
- Esquemas para objetos de dados e lógicos
Você deve usar esquemas separados para objetos de dados (tabelas e exibições) e objetos lógicos (UDFs e procedimentos armazenados). Por exemplo, você pode usar um esquema chamado
DATA_SCHEMApara tabelas e exibições, e um esquema chamadoLOGIC_SCHEMApara UDFs e procedimentos armazenados.- Referência a objetos privados
As UDFs e os procedimentos armazenados devem fazer referência a objetos privados pelos respectivos nomes qualificados. Os objetos lógicos não podem fazer referência a objetos privados pelos nomes totalmente qualificados.
- Contagem de objetos
Um Declarative Native App pode incluir até 100 UDFs e procedimentos armazenados. Para aumentar esse limite, entre em contato com o suporte Snowflake.
- Tabelas dinâmicas
A referência a tabelas dinâmicas em UDFs e procedimentos armazenados não é permitida.