Benutzerdefinierte Funktionen und gespeicherte Prozeduren in deklarativer Freigabe im Native Application Framework¶
Declarative Native Apps kann gespeicherte Prozeduren und benutzerdefinierte Funktionen (UDFs) zum Abfragen, Visualisieren und Erkunden von Daten enthalten. Unter diesem Thema wird beschrieben, wie Sie diese Objekte in Ihre App einbinden können.
Unterstützte benutzerdefinierte Funktionen und gespeicherte Prozeduren¶
Sie können die folgenden Arten von benutzerdefinierten Funktionen (UDFs) und gespeicherten Prozeduren (sprocs) in einer Declarative Native App freigeben:
Gespeicherte Prozeduren, die OWNERS RIGHTS oder RESTRICTED CALLERS RIGHTS haben. Weitere
Informationen finden Sie unter Erläuterungen zu gespeicherten Prozeduren mit Aufruferrechten und Eigentümerrechten.
Alle Arten von UDFs, außer EXTERNAL Funktionen
Benutzerdefinierte Funktionen und gespeicherte Prozeduren in Ihre Anwendung einschließen¶
Um UDFs und gespeicherte Prozeduren in Ihre Declarative Native App einzuschließen, fügen Sie die Namen der Objekte und deren Berechtigungen zur manifest.yaml-Datei hinzu. Sie müssen die Objekte nicht über separate Dateien hinzufügen, wie es bei Notizbüchern der Fall ist.
Im folgenden Beispiel wird gezeigt, wie Sie eine UDF und eine gespeicherte Prozedur in der manifest.yaml-Datei einschließen:
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]
In diesem Beispiel werden die UDF POPULATION_ANALYSIS_FUNCTION und die gespeicherte Prozedur POPULATION_ANALYSIS_PROCEDURE in die:file:manifest.yaml-Datei aufgenommen. Die ANALYST-App-Rolle erhält Zugriff auf beide Objekte.
Referenz zum Manifest¶
Dieses Feature fügt die folgenden Felder zur manifest.yaml-Datei hinzu:
Feld functions.{named function}¶
Jede benannte Funktion (Liste, erforderlich [OneOfRequired] ): unterstützt das folgende Name/Wert-Paar:
roles(Liste, optional): Eine Liste von App-Rollen, die auf die Funktion zugreifen können, z. B.[analyst]. Wenn dieses Feld leer ist ([]) oder weggelassen wird, dann erhalten nur App-Eigentümer und Rollen mit erteilten IMPORTED PRIVILEGES Zugriff. Die enthaltenen Rollen müssen im -Feld für Rollen der obersten Ebene definiert sein und im Feld {benanntes Schema}.roles enthalten sein.
Feld procedures.{named procedure}¶
Jede benannte gespeicherte Prozedur (Liste, erforderlich [OneOfRequired] ): unterstützt das folgende Name/Wert-Paar:
roles(Liste, optional): Eine Liste von App-Rollen, die auf die Prozedur zugreifen können, z. B.[analyst]. Wenn dieses Feld leer ist ([]) oder weggelassen wird, dann erhalten nur App-Eigentümer und Rollen mit erteilten IMPORTED PRIVILEGES Zugriff. Die enthaltenen Rollen müssen im -Feld für Rollen der obersten Ebene definiert sein und im Feld {benanntes Schema}.roles enthalten sein.
Beispiel einer Manifest-Datei¶
Der folgende Codeblock ist ein Beispiel für eine Declarative Native App-Manifest-Datei:
Beachten Sie, dass sich Daten- und Codeobjekte in unterschiedlichen Schemas befinden müssen.
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
Einschränkungen¶
- Unterstützte Sprachen und Typen
Snowpark-UDFs und gespeicherte Prozeduren, die in Python, Java, Javascript oder Scala geschrieben sind. Funktionen des Snowpark Container Service werden nicht unterstützt.
- Schemas für Daten- und Logikobjekte
Sie müssen separate Schemas für Datenobjekte (Tabellen und Ansichten) und Logikobjekte (UDFs und gespeicherte Prozeduren) verwenden. Sie könnten zum Beispiel ein Schema mit dem Namen
DATA_SCHEMAfür Tabellen und Ansichten sowie ein Schema namensLOGIC_SCHEMAfür UDFs und gespeicherte Prozeduren verwenden.- Auf private Objekte verweisen
Ihre UDFs und gespeicherten Prozeduren müssen auf private Objekte über ihre vom Schema qualifizierten Namen verweisen. Ihre Logikobjekte können nicht über deren vollqualifizierte Namen auf private Objekte verweisen.
- Objektanzahl
Eine Declarative Native App kann bis zu 100 UDFs und gespeicherte Prozeduren enthalten. Wenn Sie dieses Limit erhöhen möchten, wenden Sie sich an den Snowflake-Support.
- Dynamische Tabellen
Das Verweisen auf dynamische Tabellen in UDFs und gespeicherten Prozeduren wird nicht unterstützt.