FUNCTION
FUNCTION (함수 선언)
사용자 정의 함수를 선언하는 문법이에요. SQL이든 Python이든 UDF는 이 FUNCTION 키워드로 시작해요.
출처: 문서
본문
사용자 정의 함수를 선언해요.
name은 UDF의 이름이에요. 인라인 사용자 정의 함수는 단순 문자열을 사용할 수 있어요. 카탈로그 사용자 정의 함수는 UDF를 저장하기 위해 .로 구분된 카탈로그와 스키마 이름을 한정해야 하며, 아니면 UDF 저장을 위한 기본 카탈로그와 스키마에 의존해요.
매개변수 목록은 이름 parameter_name과 데이터 타입 data_type을 쉼표로 구분한 목록이에요. ()로 지정한 빈 목록도 유효해요.
RETURNS 키워드 뒤의 type 값은 UDF 출력의 데이터 타입을 식별해요.
선택적인 LANGUAGE 특성은 language로 UDF 정의에 사용된 언어를 식별해요. 기본적으로 SQL과 PYTHON 언어가 지원돼요. 언어 엔진 플러그인을 통해 추가 언어가 지원될 수도 있어요. 지정하지 않으면 기본 언어는 SQL이에요.
선택적인 DETERMINISTIC 또는 NOT DETERMINISTIC 특성은 UDF가 결정적(deterministic)임을 선언해요. 즉 동일한 입력 매개변수로 반복 호출해도 같은 결과를 낸다는 뜻이에요. UDF가 비결정적 UDF나 함수를 호출하면 비결정적이 돼요. 기본적으로 UDF는 결정적인 동작을 한다고 가정돼요.
선택적인 RETURNS NULL ON NULL INPUT 특성은 입력 매개변수 중 하나라도 NULL이면 UDF가 NULL 값을 반환한다고 선언해요. NULL 입력 값으로 UDF는 호출되지 않아요.
CALLED ON NULL INPUT 특성은 NULL 입력 매개변수 값으로도 UDF가 호출된다고 선언해요.
RETURNS NULL ON NULL INPUT과 CALLED ON NULL INPUT 특성은 상호 배타적이며, 기본값은 CALLED ON NULL INPUT이에요.
SECURITY INVOKER 또는 SECURITY DEFINER 보안 선언은 카탈로그 UDF에서만 유효해요. UDF를 호출하는 사용자(INVOKER) 또는 UDF를 만든 사용자(DEFINER)의 권한으로 UDF를 처리하는 모드를 설정해요.
COMMENT 특성은 description으로 다른 사용자에게 함수에 대한 정보를 제공하는 데 사용할 수 있어요. 이 정보는 SHOW FUNCTIONS로 접근할 수 있어요.
선택적인 WITH 절은 함수의 속성을 지정하는 데 사용할 수 있어요. 사용 가능한 속성은 함수 언어에 따라 달라져요. Python 사용자 정의 함수의 경우 handler 속성이 호출할 Python 함수의 이름을 지정해요.
SQL UDF의 경우 UDF 본문은 표현식이 있는 단순한 단일 RETURN 문이거나, BEGIN 블록 안의 statements 복합 목록일 수 있어요. UDF는 도달할 수 없어도 최상위 블록 끝에 RETURN 문을 포함해야 해요.
다른 언어의 UDF의 경우 definition은 $$로 묶인 문자열 안에 들어가요.
예시
간단한 카탈로그 함수:
CREATE FUNCTION example.default.meaning_of_life()
RETURNS BIGINT
RETURN 42;
이렇게 사용해요:
SELECT example.default.meaning_of_life(); -- returns 42
인라인 함수로 동일하게:
WITH FUNCTION meaning_of_life()
RETURNS BIGINT
RETURN 42
SELECT meaning_of_life();
FUNCTION 문을 다른 문과 결합해 사용하는 다양한 복잡도의 추가 예시는 SQL UDF 문서와 Python UDF 문서에서 확인할 수 있어요.
더 알아보기 (Learn more)
UDF의 개념과 시작 방법은 사용자 정의 함수와 UDF 소개 문서를, 카탈로그에 저장하는 방법은 CREATE FUNCTION 문서를 참고해요.