User-Defined Functions and Stored Procedures in Declarative Shared Native Applications¶
Declarative Native Apps can include stored procedures and user-defined functions (UDFs) to query, visualize, and explore the data. This topic describes how to include these logic objects in your app.
지원되는 사용자 정의 함수 및 저장 프로시저¶
|declarative-app-short|에서 다음 유형의 사용자 정의 함수(UDFs) 및 저장 프로시저를 공유할 수 있습니다.
Stored procedures that have OWNERS RIGHTS or RESTRICTED CALLERS RIGHTS. For more information, see Understanding caller’s rights and owner’s rights stored procedures.
모든 유형의 UDFs, EXTERNAL 함수 제외
Python, Java, Javascript, Scala로 작성된 Snowpark UDFs 및 저장 프로시저. Snowpark Container Service Functions는 지원되지 않습니다.
애플리케이션에 사용자 정의 함수 및 저장 프로시저 포함하기¶
|declarative-app-short|에 UDFs 및 저장 프로시저를 포함하려면 오브젝트의 이름과 해당 권한을 manifest.yaml 파일에 추가합니다. 노트북에서처럼 별도의 파일을 사용하여 오브젝트를 추가할 필요가 없습니다.
다음 예제에서는 manifest.yaml 파일에 UDF 및 저장 프로시저를 포함하는 방법을 보여줍니다.
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]
이 예제에서는 POPULATION_ANALYSIS_FUNCTION UDF 및 POPULATION_ANALYSIS_PROCEDURE 저장 프로시저가 manifest.yaml 파일에 포함됩니다. ANALYST 앱 역할에는 두 오브젝트에 대한 액세스 권한이 부여됩니다.
UDFs 및 저장 프로시저를 사용하여 비공개(비공유) 오브젝트에 액세스하기¶
UDFs 및 저장 프로시저를 사용하여 비공개(비공유) 테이블과 뷰에 액세스할 수 있습니다. 예를 들어, 데이터베이스에 컨슈머에게 표시되지 않는 뷰가 있을 수 있지만, 컨슈머는 저장 프로시저를 사용하여 해당 뷰에서 데이터를 검색할 수 있습니다.
고객이 UDFs 및 저장 프로시저를 사용하여 비공개 오브젝트에 액세스할 수 있도록 허용하려면 manifest.yaml 파일에서 오브젝트를 private: true 키워드로 표시합니다.
다음 예제에서는 저장 프로시저가 manifest.yaml 파일의 비공개 테이블에 액세스하도록 허용하는 방법을 보여줍니다.
manifest_version: 2
roles:
- VIEWER:
comment: "The VIEWER role can access a stored procedure that retrieves data from a view, but not the underlying view."
shared_content:
databases:
- SNAF_POPULATION_DB:
schemas:
- DATA_SCHEMA:
views: # This view is private as no roles are granted
- COUNTRY_POP_BY_YEAR_2000:
private: true
- LOGIC_SCHEMA:
roles: [VIEWER]
procedures:
- POPULATION_DISPLAY_PROCEDURE():
roles: [VIEWER]
이전 예제에서 COUNTRY_POP_BY_YEAR_2000 뷰는 액세스 권한이 부여되지 않았기 때문에 비공개이지만, private 매개 변수를 사용하면 논리 오브젝트가 액세스할 수 있습니다. VIEWER 앱 역할은 저장 프로시저를 실행할 수 있지만, 비공개 뷰를 직접 쿼리할 수는 없습니다. COUNTRY_POP_BY_YEAR_2000 뷰가 참조하는 테이블은 뷰가 액세스하기 위해 manifest.yaml 파일에 포함될 필요가 없습니다.
제한 사항¶
- 지원되는 언어 및 유형
Snowpark UDFs and stored procedures written in Python, Java, Javascript, and Scala. Snowpark Container Service functions are not supported.
- 데이터 오브젝트 및 논리 오브젝트에 대한 스키마
데이터 오브젝트(테이블 및 뷰)와 논리 오브젝트(UDFs 및 저장 프로시저)에 대해 별도의 스키마를 사용해야 합니다. 예를 들어, 테이블 및 뷰의 경우 이름이 :code:`DATA_SCHEMA`인 스키마를 사용하고 UDFs 및 저장 프로시저의 경우 이름이 :code:`LOGIC_SCHEMA`인 스키마를 사용할 수 있습니다.
- 비공개 오브젝트 참조하기
UDFs 및 저장 프로시저는 스키마 정규화된 이름으로 비공개 오브젝트를 참조해야 합니다. 논리 오브젝트는 정규화된 이름으로 비공개 오브젝트를 참조할 수 없습니다.
- 오브젝트 수
|declarative-app-short|은 최대 100개의 UDFs 및 저장 프로시저를 포함할 수 있습니다. 이 한도를 늘리려면 `Snowflake 지원`_에 문의하세요.
- 동적 테이블
UDFs 및 저장 프로시저에서 동적 테이블 참조는 지원되지 않습니다.