함수 수정하기
함수 수정하기 (ALTER FUNCTION)
기존 사용자 정의 함수 또는 외부 함수의 속성을 수정해요.
UDF에 다른 변경을 하려면 함수를 삭제하고(DROP FUNCTION 사용) 다시 생성해야 해요.
참조:
Writing external functions, User-defined functions overview, CREATE FUNCTION , DROP FUNCTION , SHOW USER FUNCTIONS , DESCRIBE FUNCTION, CREATE EXTERNAL FUNCTION , DESCRIBE FUNCTION , DROP FUNCTION , SHOW EXTERNAL FUNCTIONS
출처: 문서
본문
구문
사용자 정의 함수 및 외부 함수
ALTER FUNCTION 구문은 UDF 핸들러로 사용하는 언어에 따라 달라져요.
Java 핸들러
ALTER FUNCTION [ IF EXISTS ] ( [ , ... ] ) RENAME TO
ALTER FUNCTION [ IF EXISTS ] ( [ , ... ] ) SET SECURE
ALTER FUNCTION [ IF EXISTS ] ( [ , ... ] ) UNSET { SECURE | LOG_LEVEL | TRACE_LEVEL | COMMENT }
ALTER FUNCTION [ IF EXISTS ] ( [ , ... ] ) SET
[ LOG_LEVEL = '' ]
[ TRACE_LEVEL = '' ]
[ EXTERNAL_ACCESS_INTEGRATIONS = ( [ , ... ] ) ]
[ SECRETS = ( '' = [ , '' = ... ] ) ]
[ COMMENT = '' ]
ALTER FUNCTION [ IF EXISTS ] ( [ , ... ] ) SET TAG = '' [ , = '' ... ]
ALTER FUNCTION [ IF EXISTS ] ( [ , ... ] ) UNSET TAG [ , ... ]
JavaScript 핸들러
ALTER FUNCTION [ IF EXISTS ] ( [ , ... ] ) RENAME TO
ALTER FUNCTION [ IF EXISTS ] ( [ , ... ] ) SET SECURE
ALTER FUNCTION [ IF EXISTS ] ( [ , ... ] ) UNSET { SECURE | LOG_LEVEL | TRACE_LEVEL | COMMENT }
ALTER FUNCTION [ IF EXISTS ] ( [ , ... ] ) SET
[ LOG_LEVEL = '' ]
[ TRACE_LEVEL = '' ]
[ COMMENT = '' ]
ALTER FUNCTION [ IF EXISTS ] ( [ , ... ] ) SET TAG = '' [ , = '' ... ]
ALTER FUNCTION [ IF EXISTS ] ( [ , ... ] ) UNSET TAG [ , ... ]
Python 핸들러
ALTER FUNCTION [ IF EXISTS ] ( [ , ... ] ) RENAME TO
ALTER FUNCTION [ IF EXISTS ] ( [ , ... ] ) SET SECURE
ALTER FUNCTION [ IF EXISTS ] ( [ , ... ] ) UNSET { SECURE | LOG_LEVEL | TRACE_LEVEL | COMMENT }
ALTER FUNCTION [ IF EXISTS ] ( [ , ... ] ) SET
[ LOG_LEVEL = '' ]
[ TRACE_LEVEL = '' ]
[ EXTERNAL_ACCESS_INTEGRATIONS = ( [ , ... ] ) ]
[ SECRETS = ( '' = [ , '' = ... ] ) ]
[ COMMENT = '' ]
ALTER FUNCTION [ IF EXISTS ] ( [ , ... ] ) SET TAG = '' [ , = '' ... ]
ALTER FUNCTION [ IF EXISTS ] ( [ , ... ] ) UNSET TAG [ , ... ]
Scala 핸들러
ALTER FUNCTION [ IF EXISTS ] ( [ , ... ] ) RENAME TO
ALTER FUNCTION [ IF EXISTS ] ( [ , ... ] ) SET SECURE
ALTER FUNCTION [ IF EXISTS ] ( [ , ... ] ) UNSET { SECURE | LOG_LEVEL | TRACE_LEVEL | COMMENT }
ALTER FUNCTION [ IF EXISTS ] ( [ , ... ] ) SET
[ LOG_LEVEL = '' ]
[ TRACE_LEVEL = '' ]
[ EXTERNAL_ACCESS_INTEGRATIONS = ( [ , ... ] ) ]
[ SECRETS = ( '' = [ , '' = ... ] ) ]
[ COMMENT = '' ]
ALTER FUNCTION [ IF EXISTS ] ( [ , ... ] ) SET TAG = '' [ , = '' ... ]
ALTER FUNCTION [ IF EXISTS ] ( [ , ... ] ) UNSET TAG [ , ... ]
SQL 핸들러
ALTER FUNCTION [ IF EXISTS ] ( [ , ... ] ) RENAME TO
ALTER FUNCTION [ IF EXISTS ] ( [ , ... ] ) SET SECURE
ALTER FUNCTION [ IF EXISTS ] ( [ , ... ] ) UNSET { SECURE | LOG_LEVEL | TRACE_LEVEL | COMMENT }
ALTER FUNCTION [ IF EXISTS ] ( [ , ... ] ) SET
[ LOG_LEVEL = '' ]
[ TRACE_LEVEL = '' ]
[ COMMENT = '' ]
ALTER FUNCTION [ IF EXISTS ] ( [ , ... ] ) SET TAG = '' [ , = '' ... ]
ALTER FUNCTION [ IF EXISTS ] ( [ , ... ] ) UNSET TAG [ , ... ]
ALTER FUNCTION [ IF EXISTS ] ( [ , ... ] ) UNSET DCM PROJECT
외부 함수
모든 언어 핸들러
ALTER FUNCTION [ IF EXISTS ] ( [ , ... ] ) SET API_INTEGRATION =
ALTER FUNCTION [ IF EXISTS ] ( [ , ... ] ) SET HEADERS = ( [ '' = '' [ , '' = '' ... ] ] )
ALTER FUNCTION [ IF EXISTS ] ( [ , ... ] ) SET CONTEXT_HEADERS = ( [ [ , ...] ] )
ALTER FUNCTION [ IF EXISTS ] ( [ , ... ] ) SET MAX_BATCH_ROWS =
ALTER FUNCTION [ IF EXISTS ] ( [ , ... ] ) SET COMPRESSION =
ALTER FUNCTION [ IF EXISTS ] ( [ , ... ] ) SET { REQUEST_TRANSLATOR | RESPONSE_TRANSLATOR } =
ALTER FUNCTION [ IF EXISTS ] ( [ , ... ] ) UNSET
{ COMMENT | HEADERS | CONTEXT_HEADERS | MAX_BATCH_ROWS | COMPRESSION | SECURE | REQUEST_TRANSLATOR | RESPONSE_TRANSLATOR }
매개변수
사용자 정의 함수 및 외부 함수
name
변경할 UDF의 식별자를 지정해요. 식별자에는 스키마 이름, 데이터베이스 이름, 함수 이름이 포함될 수 있어요. 식별자에 공백이나 특수 문자가 포함되어 있으면 전체 문자열을 큰따옴표로 묶어야 해요. 큰따옴표로 묶인 식별자는 대소문자를 구분해요.
arg_data_type [ , ... ]
외부 함수의 인자/입력 데이터 타입을 지정해요.
함수가 인자를 받는 경우, ALTER 명령은 인자 타입을 지정해야 해요. 함수는 이름 오버로딩을 지원하기 때문이에요. 즉, 같은 스키마에 있는 두 함수가 같은 이름을 가질 수 있고, 인자 타입으로 함수를 식별해요.
SET ...
함수에 설정할 속성을 지정해요:
SECURE
함수의 보안 여부를 지정해요. 자세한 내용은 Protecting Sensitive Information with Secure UDFs and Stored Procedures를 참고해요.
LOG_LEVEL = 'log_level'
활성 이벤트 테이블에 수집되어 사용 가능해야 하는 메시지의 심각도 수준을 지정해요. 지정된 수준(및 그보다 더 심각한 수준)의 메시지가 수집돼요.
수준에 대한 자세한 내용은 을 참고해요. 로그 수준 설정에 대한 정보는 Setting levels for logging, metrics, and tracing을 참고해요.
TRACE_LEVEL = 'trace_level'
추적 이벤트가 이벤트 테이블에 수집되는 방식을 제어해요.
수준에 대한 정보는 을 참고해요. 추적 수준 설정에 대한 정보는 Setting levels for logging, metrics, and tracing을 참고해요.
EXTERNAL_ACCESS_INTEGRATIONS = ( integration_name [ , ... ] )
이 함수의 핸들러 코드가 외부 네트워크에 액세스하기 위해 필요한 external access integrations의 이름입니다.
외부 액세스 통합에는 핸들러 코드가 외부 REST API와 같은 외부 네트워크에 요청을 보내는 데 필요한 외부 위치와 자격 증명(있는 경우)을 지정하는 network rules 및 secrets가 포함됩니다.
자세한 내용은 External network access overview를 참조하세요.
SECRETS = ( 'secret_variable_name' = secret_name [ , ... ] )
secret의 이름을 변수에 할당하여 핸들러 코드에서 secret의 정보를 검색할 때 해당 변수를 사용해 secret을 참조할 수 있게 합니다.
이 매개변수의 값은 다음 부분으로 구성된 할당 표현식 목록입니다.
-
secret_name은 external access integration's의 ALLOWED_AUTHENTICATION_SECRETS 매개변수 값에 지정된 secret의 이름입니다. 그리고 해당 외부 액세스 통합의 이름은 이 CREATE FUNCTION 호출의 EXTERNAL_ACCESS_INTEGRATIONS 매개변수 값으로 지정되어야 합니다.
EXTERNAL_ACCESS_INTEGRATIONS 매개변수로 지정된 통합에 포함되지 않은 secret을 SECRETS 값으로 지정하면 오류가 발생합니다.
-
'secret_variable_name'은 핸들러 코드에서 secret의 정보를 검색할 때 사용할 변수입니다.
COMMENT = 'string_literal'
함수에 대한 주석을 추가하거나 기존 주석을 덮어씁니다. 지정한 값은 SHOW FUNCTIONS 및 SHOW USER FUNCTIONS 출력의 DESCRIPTION 열에 표시됩니다.
TAG tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ]
tag 이름과 태그 문자열 값을 지정합니다.
태그 값은 항상 문자열이며, 태그 값의 최대 문자 수는 256자입니다.
문장에서 태그를 지정하는 방법에 대한 자세한 내용은 를 참조하세요.
UNSET ...
함수에서 설정 해제할 속성을 지정하며, 속성을 기본값으로 재설정합니다.
UNSET DCM PROJECT
현재 함수를 관리하는 DCM project에서 함수를 분리합니다. 이 명령은 함수를 삭제(drop)하지 않고 함수와 %dcm-object% 간의 연결을 제거합니다. 자세한 내용은 를 참조하세요.
사용자 정의 함수
RENAME TO new_name
UDF의 새 식별자를 지정합니다. 식별자와 기존 인수 데이터 타입의 조합은 스키마 내에서 고유해야 합니다.
자세한 내용은 Identifier requirements를 참조하세요.
UDF의 새 이름을 지정할 때는 인수 데이터 타입이나 괄호를 지정하지 말고 새 이름만 지정하세요.
객체를 선택적으로 이름을 바꾸면서 다른 데이터베이스 및/또는 스키마로 이동할 수 있습니다. 이렇게 하려면 각각 db_name.schema_name.object_name 또는 schema_name.object_name 형식으로 새 데이터베이스 및/또는 스키마 이름을 포함하는 정규화된 new_name 값을 지정하세요.
- 대상 데이터베이스 및/또는 스키마는 이미 존재해야 합니다. 또한 같은 이름의 객체가 새 위치에 이미 존재할 수 없습니다. 그렇지 않으면 문장이 오류를 반환합니다.
- 객체 소유자(즉, 객체에 대한 OWNERSHIP 권한이 있는 역할)가 대상 스키마도 소유하지 않는 한, 객체를 관리형 액세스 스키마로 이동하는 것은 금지됩니다.
객체 이름이 변경되면 해당 객체를 참조하는 다른 객체도 새 이름으로 업데이트해야 합니다.
외부 함수
RENAME TO new_name
함수의 새 식별자를 지정합니다.
함수는 이름과 인수 타입으로 식별되고 확인되므로, 함수가 생성된 스키마 내에서 식별자가 고유할 필요는 없습니다. 그러나 시그니처(이름과 매개변수 데이터 타입)는 스키마 내에서 고유해야 합니다.
이름은 Snowflake identifiers 규칙을 따라야 합니다. 자세한 내용은 Identifier requirements를 참조하세요.
외부 함수의 새 이름을 지정할 때는 인수 데이터 타입이나 괄호를 지정하지 마세요. 함수는 이전과 동일한 인수를 계속 사용합니다.
api_integration_name
프록시 서비스 호출을 인증하는 데 사용할 API 통합 객체의 이름입니다.
이 매개변수에 대한 자세한 내용은 CREATE EXTERNAL FUNCTION에서 확인할 수 있습니다.
HEADERS = ( 'header_1' = 'value' [ , 'header_2' = 'value' ... ] )
이 절을 사용하면 모든 요청과 함께 전송되는 키-값 메타데이터를 첨부할 수 있습니다.
값은 상수 문자열이어야 하며 표현식이 아니어야 합니다.
이 매개변수에 대한 자세한 내용은 CREATE EXTERNAL FUNCTION에서 확인할 수 있습니다.
CONTEXT_HEADERS = ( [ context_function_1 [ , context_function_2 ... ] ] )
이것은 HEADERS와 유사하지만 상수 문자열만 허용하는 대신 Snowflake 컨텍스트 함수 결과를 HTTP 헤더에 바인딩할 수 있게 해줍니다.
각 값은 컨텍스트 함수의 이름이어야 합니다. 이름은 따옴표로 묶지 않아야 합니다.
이 매개변수에 대한 자세한 내용은 CREATE EXTERNAL FUNCTION에서 확인할 수 있습니다.
COMPRESSION = compression_type
이 절을 지정하면 Snowflake에서 프록시 서비스로 보낼 때와 프록시 서비스에서 Snowflake로 다시 보낼 때 JSON 페이로드가 지정된 형식으로 압축됩니다.
compression_type의 유효한 값에 대한 자세한 내용은 CREATE EXTERNAL FUNCTION을 참조하세요.
{ REQUEST_TRANSLATOR | RESPONSE_TRANSLATOR } = udf_name
외부 함수에 이미 요청 변환기나 응답 변환기가 없는 경우 요청 변환기 또는 응답 변환기를 추가하거나, 이전에 생성한 JavaScript UDF의 이름을 지정하여 기존 요청 변환기 또는 응답 변환기를 교체할 수 있습니다.
자세한 내용은 Using request and response translators with data for a remote service를 참조하세요.
액세스 제어 요구 사항
이 작업을 실행하는 데 사용되는 role은 최소한 다음 privileges을 보유해야 합니다:
| 권한 | 객체 | 참고 |
|---|---|---|
| USAGE | Function | UDF 또는 외부 함수를 호출할 수 있게 해요. |
| APPLY | Tag | UDF 또는 외부 함수에 태그를 설정할 수 있게 해요. |
스키마의 객체에 대해 작업하려면 상위 데이터베이스에 대한 권한이 하나 이상, 상위 스키마에 대한 권한이 하나 이상 필요해요.
지정된 권한 집합으로 사용자 지정 역할을 만드는 방법은 을(를) 참조하세요.
보안 객체(securable objects)에 대해 SQL 작업을 수행할 때의 역할 및 권한 부여에 대한 일반 정보는 Overview of Access Control을(를) 참조하세요.
사용 참고 사항
- 메타데이터 관련:
고객은 Snowflake 서비스를 사용할 때 메타데이터로 개인 데이터(User 객체의 경우 제외), 민감한 데이터, 수출 통제 데이터 또는 기타 규제 대상 데이터를 입력하지 않도록 해야 해요. 자세한 내용은 Metadata fields in Snowflake을(를) 참조하세요.
사용자 정의 함수
- masking policy에서 UDF를 사용하는 경우 열, UDF, masking policy의 데이터 타입이 일치하는지 확인하세요. 자세한 내용은 을(를) 참조하세요.
외부 함수
- API_INTEGRATION에 대한 UNSET 명령은 없어요. API_INTEGRATION은 변경할 수 있지만 설정을 해제(unset)할 수는 없어요. 자세한 내용은 ALTER API INTEGRATION을(를) 참조하세요.
예제
function1 함수를 function2로 이름을 바꾸세요:
ALTER FUNCTION IF EXISTS function1(number) RENAME TO function2;
일반 함수 function2를 보안 함수로 변환하세요:
ALTER FUNCTION function2(number) SET SECURE;
외부 함수
외부 함수의 API Integration을 변경하세요:
ALTER FUNCTION function4(number) SET API_INTEGRATION = api_integration_2;
외부 함수의 배치당 최대 행 수를 설정하세요:
ALTER FUNCTION function5(number) SET MAX_BATCH_ROWS = 100;