BigQuery > 사용자 정의 함수 (공식문서)
UDF(User Define Function)이란 사용자가 정의한 함수를 의미한다.
UDF를 사용하면 SQL 표현식 또는 JavaScript 코드를 사용하여 함수를 만들 수 있다. UDF는 입력으로 구성된 열을 받아 입력을 기반으로 작업을 수행하고 작업의 결과를 값으로 반환한다.
UDF는 영구 UDF(persistent UDF) 또는 임시 UDF(Temporary UDF) 로 정의할 수 있다. 영구 UDF는 여러 쿼리에서 재사용 가능하고, 임시 UDF는 단일 쿼리 범위에만 사용 가능하다.
UDF를 만들기 위해서는 CREATE (TEMP) FUNCTION
문을 사용한다.
DROP FUNCTION
문을 사용하여 삭제한다.function_name
에는 마침표를 포함할 수 없다.CREATE FUNCTION mydataset.referringFunction() AS (mydataset.referencedFuntion());
# Temporary UDF : 쿼리문 작성 시 생성
CREATE [TEMPORARY | TEMP] FUNCTION <function_name> (<function_parameters>)
[RETURNS data_type]
AS <function_definition>;
# Persistent UDF : BigQeury UDF 데이터 셋 생성
CREATE OR REPLACE FUNCTION <function_name>(<function_parameters>)
[RETURNS data_type]
AS <function_definition>;
;
를 반드시 붙여야 한다.;
가 나오면 하나의 쿼리문이 종료됨을 의미하지만 UDF에서 함수를 정의할 땐 예외사항 으로 동작한다.;
를 붙여야 하고, function이 유효하게 사용되기 위해 쿼리문과 같이 실행해야 한다.-- URL decode function example
#standardSQL
CREATE TEMP FUNCTION URLDECODE(url STRING) AS ((
SELECT SAFE_CONVERT_BYTES_TO_STRING(
ARRAY_TO_STRING(ARRAY_AGG(
IF(STARTS_WITH(y, '%'), FROM_HEX(SUBSTR(y, 2)), CAST(y AS BYTES)) ORDER BY i
), b''))
FROM UNNEST(REGEXP_EXTRACT_ALL(url, r"%[0-9a-fA-F]{2}|[^%]+")) AS y WITH OFFSET AS i
));
SELECT
column_name,
URLDECODE(REGEXP_EXTRACT(column_name, "url=([^&]+)")) AS url
FROM `project.dataset.table`
"
을 하나만 사용하고, 스니펫(snippet)이거나 여러 줄이면 triple-quoted """
을 사용한다.# Temporary UDF : 쿼리문 작성 시 생성
CREATE [TEMPORARY | TEMP] FUNCTION <function_name> (<function_parameters>)
RETURNS data_type
LANGUAGE js
AS <"""body""">];
CREATE TEMP FUNCTION
을 통해 Temporary UDF를 생성한다.CREATE FUNCTION
을 통해 Persistent UDF를 생성한다.CREATE OR REPLACE FUNCTION
은 기존 함수가 저장할 경우 수정한다.