선언적 공유 네이티브 애플리케이션의 사용자 정의 함수 및 저장 프로시저¶
|declarative-app-short-plural|에는 데이터를 쿼리, 시각화, 탐색하기 위해 저장 프로시저 및 :doc:`사용자 정의 함수</developer-guide/udf/udf-overview>`(UDFs)가 포함될 수 있습니다. 이 항목에서는 앱에 이러한 논리 오브젝트를 포함하는 방법에 대해 설명합니다.
지원되는 사용자 정의 함수 및 저장 프로시저¶
|declarative-app-short|에서 다음 유형의 사용자 정의 함수(UDFs) 및 저장 프로시저를 공유할 수 있습니다.
OWNERS RIGHTS 또는 RESTRICTED CALLERS RIGHTS가 있는 저장 프로시저. 자세한 내용은 :doc:`호출자 권한 및 소유자 권한 저장 프로시저 이해하기</developer-guide/stored-procedure/stored-procedures-rights>`를 참조하세요.
모든 유형의 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 파일에 포함될 필요가 없습니다.
제한 사항¶
- 지원되는 언어 및 유형
Python, Java, Javascript, Scala로 작성된 Snowpark UDFs 및 저장 프로시저. Snowpark Container Service 함수는 지원되지 않습니다.
- 데이터 오브젝트 및 논리 오브젝트에 대한 스키마
데이터 오브젝트(테이블 및 뷰)와 논리 오브젝트(UDFs 및 저장 프로시저)에 대해 별도의 스키마를 사용해야 합니다. 예를 들어, 테이블 및 뷰의 경우 이름이 :code:`DATA_SCHEMA`인 스키마를 사용하고 UDFs 및 저장 프로시저의 경우 이름이 :code:`LOGIC_SCHEMA`인 스키마를 사용할 수 있습니다.
- 비공개 오브젝트 참조하기
UDFs 및 저장 프로시저는 스키마 정규화된 이름으로 비공개 오브젝트를 참조해야 합니다. 논리 오브젝트는 정규화된 이름으로 비공개 오브젝트를 참조할 수 없습니다.
- 오브젝트 수
|declarative-app-short|은 최대 100개의 UDFs 및 저장 프로시저를 포함할 수 있습니다. 이 한도를 늘리려면 `Snowflake 지원`_에 문의하세요.
- 동적 테이블
UDFs 및 저장 프로시저에서 동적 테이블 참조는 지원되지 않습니다.