ALTER TASK¶
기존 작업의 속성을 수정합니다.
- 참고 항목:
구문¶
ALTER TASK [ IF EXISTS ] <name> RESUME | SUSPEND
ALTER TASK [ IF EXISTS ] <name> REMOVE AFTER <string> [ , <string> , ... ] | ADD AFTER <string> [ , <string> , ... ]
ALTER TASK [ IF EXISTS ] <name> SET
[ { WAREHOUSE = <string> } | { USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = <string> } ]
[ SCHEDULE = '{ <number> MINUTE | USING CRON <expr> <time_zone> }' ]
[ CONFIG = <configuration_string> ]
[ ALLOW_OVERLAPPING_EXECUTION = TRUE | FALSE ]
[ USER_TASK_TIMEOUT_MS = <num> ]
[ SUSPEND_TASK_AFTER_NUM_FAILURES = <num> ]
[ ERROR_INTEGRATION = <integration_name> ]
[ COMMENT = <string> ]
[ <session_parameter> = <value> [ , <session_parameter> = <value> ... ] ]
[ TASK_AUTO_RETRY_ATTEMPTS = <num> ]
ALTER TASK [ IF EXISTS ] <name> UNSET
[ WAREHOUSE ]
[ SCHEDULE ]
[ CONFIG ]
[ ALLOW_OVERLAPPING_EXECUTION ]
[ USER_TASK_TIMEOUT_MS ]
[ SUSPEND_TASK_AFTER_NUM_FAILURES ]
[ COMMENT ]
[ <session_parameter> [ , <session_parameter> ... ] ]
[ , ... ]
ALTER TASK [ IF EXISTS ] <name> SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ]
ALTER TASK [ IF EXISTS ] <name> UNSET TAG <tag_name> [ , <tag_name> ... ]
ALTER TASK [ IF EXISTS ] <name> SET FINALIZE = <string>
ALTER TASK [ IF EXISTS ] <name> UNSET FINALIZE
ALTER TASK [ IF EXISTS ] <name> MODIFY AS <sql>
ALTER TASK [ IF EXISTS ] <name> MODIFY WHEN <boolean_expr>
매개 변수¶
name
변경할 작업의 식별자입니다. 식별자에 공백이나 특수 문자가 포함된 경우 전체 문자열을 큰따옴표로 묶어야 합니다. 큰따옴표로 묶인 식별자도 대/소문자를 구분합니다.
RESUME | SUSPEND
작업에 대해 수행할 동작을 지정합니다.
RESUME
은 일시 중단된 작업을 ‘시작됨’ 상태로 만듭니다. 계정은 현재 최대 30,000개의 시작된 작업으로 제한됩니다.작업 그래프의 루트 작업을 재개하기 전에 모든 하위 작업을 재개하십시오. 루트 작업의 하위 작업을 재귀적으로 재개하려면 SYSTEM$TASK_DEPENDENTS_ENABLE 을 사용하십시오.
SUSPEND
는 작업을 ‘일시 중단됨’ 상태로 만듭니다.
작업 일정이 간격(
number MINUTE
)으로 설정된 경우, 일정의 기본 간격 시간 이 작업이 다시 시작되는 현재 시간으로 재설정됩니다.기본 간격 시간은 현재 시계 시간부터 간격 카운터를 시작합니다. 예를 들어,
10
의 INTERVAL 값이 설정되고 작업이 9:03 AM에 다시 시작되면 작업은 9:13 AM, 9:23 AM 등에 실행됩니다. 설정된 간격이 발생하기 전에 작업이 실행되지 않는다는 점만 보장합니다. 현재 예에서 작업은 9:14 AM에 처음 실행될 수 있지만 9:12 AM에는 실행되지 않습니다.REMOVE AFTER string [ , string , ... ]
작업 그래프 에서 이 하위 작업에 대한 하나 이상의 현재 선행 작업 이름을 지정합니다.
하위 작업의 모든 선행 작업이 제거되면 다른 작업이 이전의 하위 작업을 선행 작업으로 식별하는지 여부에 따라 이 하위 작업이 독립 실행형 작업 또는 루트 작업이 됩니다. 이전 하위 작업이 루트 작업이 될 경우 이 작업은 기본적으로 일시 중단되며 수동으로 다시 시작해야 합니다.
ADD AFTER string [ , string , ... ]
작업 그래프 에서 이 하위 작업의 선행 작업으로 추가할 하나 이상의 기존 작업 이름을 지정합니다. 작업 그래프의 각 하위 작업은 모든 선행 작업이 성공적으로 실행을 마칠 때 실행됩니다. 자세한 내용은 CREATE TASK 의
AFTER
매개 변수에 대한 설명을 참조하십시오.각 하위 작업은 100개의 선행 작업으로 제한됩니다.
SET ...
다음 중 하나 또는 둘 다를 지정합니다.
작업을 위해 설정할 하나 이상의 속성(공백, 쉼표 또는 줄 바꿈으로 구분됨). 설정할 수 있는 속성에 대한 자세한 내용은 CREATE TASK 를 참조하십시오.
작업 실행 시 세션에 대해 설정할 세션 매개 변수의 쉼표로 구분된 목록입니다. 작업은 모든 세션 매개 변수를 지원합니다. 전체 목록은 매개 변수 를 참조하십시오.
TAG tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ]
태그 이름과 태그 문자열 값을 지정합니다.
태그 값은 항상 문자열이며, 태그 값의 최대 문자 수는 256자입니다.
문에서 태그를 지정하는 방법에 대한 자세한 내용은 오브젝트 및 열에 대한 태그 할당량 섹션을 참조하십시오.
UNSET ...
작업에 대해 설정 해제할 하나 이상의 속성 및/또는 세션 매개 변수를 지정하여 이들을 기본값으로 재설정합니다.
단일 ALTER 문으로 여러 속성/매개 변수를 재설정할 수 있지만, 각 속성/매개 변수는 쉼표로 구분해야 합니다. 속성/매개 변수를 재설정할 때는 이름만 지정하십시오. 속성/매개 변수 값을 지정하면 오류가 반환됩니다.
sql
작업 실행 시 실행할 SQL 코드를 지정합니다.
단일 SQL 문
저장 프로시저 호출
Snowflake Scripting 을 사용한 프로시저 논리
현재, Snowsight 와 Classic Console 는 Snowflake Scripting을 사용하기 위한 작업 생성 또는 수정을 지원하지 않습니다. 대신 SnowSQL 또는 다른 명령줄 클라이언트를 사용하십시오.
참고
작업을 생성하기 전 작업에서 참조하는 SQL 코드가 예상대로 실행되는지 확인하십시오. 작업은 이미 철저한 테스트를 거친 SQL 코드를 자동화하는 것이 그 취지입니다.
WHEN boolean_expr
부울 SQL 식을 지정합니다. (
SCHEDULE
또는AFTER
설정을 기준으로) 작업이 트리거되면 식의 조건을 검증하여 실행할지 여부를 결정합니다. 식의 조건이 충족되지 않으면 작업이 현재의 실행을 건너뜁니다. 이 작업을 선행 작업으로 식별하는 작업도 실행되지 않습니다.WHEN 식의 조건을 검증하는 데 가상 웨어하우스가 필요하지 않습니다. 대신에 검증은 클라우드 서비스 계층에서 처리됩니다. 작업이 WHEN 조건을 평가하고 실행되지 않을 때마다 명목 요금이 발생합니다. 요금은 작업이 실행될 때까지 트리거될 때마다 누적됩니다. 그때, 요금은 Snowflake 크레딧으로 변환되고 작업 실행에 대한 컴퓨팅 리소스 사용량에 추가됩니다.
일반적으로, 조건을 검증하는 계산 시간은 작업 실행 시간에 비해 무의미한 수준입니다. 예약된 작업과 실제 작업 실행을 최대한 가깝게 맞추는 것이 가장 좋은 방법입니다. 실제 작업 실행과 제대로 동기화되지 않는 작업 일정은 피하십시오. 예를 들어, 데이터가 대략 24시간마다 스트림이 있는 테이블에 삽입되는 경우 1분마다 스트림 데이터를 확인하는 작업을 예약하지 마십시오. 각 실행에서 WHEN 식을 검증하는 비용은 일반적으로 사소한 수준이지만, 요금이 누적됩니다.
컴퓨팅 리소스의 일일 사용량 중 10% 할당량 미만으로 떨어지는 클라우드 서비스의 일일 사용량에는 클라우드 서비스 요금이 누적되지 않습니다.
현재, SQL 식에서 평가를 위해 다음 함수가 지원됩니다.
- SYSTEM$STREAM_HAS_DATA
지정된 스트림에 변경 내용 추적 데이터가 포함되어 있는지 여부를 나타냅니다. 스트림에 변경 데이터가 없는 경우 현재 작업 실행을 건너뛰는 데 사용됩니다.
결과가
FALSE
이면 작업이 실행되지 않습니다.- SYSTEM$GET_PREDECESSOR_RETURN_VALUE
작업 그래프에서 선행 작업에 대한 반환 값을 검색합니다. 반환된 결과를 기준으로 작업을 실행할지 여부를 결정하는 데 사용됩니다.
사용법 노트¶
(각각 ALTER TASK … RESUME 또는 ALTER TASK … SUSPEND를 사용하여) 작업을 다시 시작하거나 일시 중단하려면 작업에 대한 OWNERSHIP 또는 OPERATE 권한이 필요합니다.
작업이 다시 시작되면 Snowflake는 작업에 대한 OWNERSHIP 권한을 가진 역할에 작업에 할당된 웨어하우스에 대한 USAGE 권한뿐 아니라 전역 EXECUTE TASK 권한도 있는지 확인하며, 그렇지 않으면 오류가 생성됩니다.
계정 관리자(ACCOUNTADMIN 역할을 가진 사용자)만 역할에 EXECUTE TASK 권한을 부여할 수 있습니다. 사용 편의성을 위해, 사용자 지정 역할(예: TASKADMIN)을 만들고 이 역할에 EXECUTE TASK 권한을 할당하는 것이 좋습니다. 권한을 부여할 수 있는 모든 역할(예: SECURITYADMIN 또는 MANAGE GRANTS 권한을 가진 역할)은 이 사용자 지정 역할을 작업 소유자 역할에 부여하여 자체 작업을 변경하도록 허용할 수 있습니다. 사용자 지정 역할 및 역할 계층 구조를 만들기 위한 지침은 액세스 제어 구성하기 을 참조하십시오.
작업 소유자(즉, 작업에 대한 OWNERSHIP 권한을 가진 역할)만 작업의 속성을 설정하거나 설정 해제할 수 있습니다.
구성을 변경할 때 개별 키-값 페어를 업데이트할 수 없습니다. 오히려 전체 구성을 나타내는 전체 교체 json 문자열을 입력해야 합니다.
독립 실행형 작업을 수정하려면 먼저 작업을 일시 중단해야 합니다.
작업 그래프에 있는 임의의 작업을 수정하거나 하위 작업을 일시 중단 또는 다시 시작하거나 하위 작업을 추가하기 전에 작업 그래프 에 있는 루트 작업을 일시 중단해야 합니다(ALTER TASK … AFTER 사용).
작업 그래프는 다시 시작 또는 일시 중단 상태에서 최대 총 1,000개의 작업(루트 작업 포함)으로 제한됩니다.
작업 그래프에서 루트 작업에 연결된 모든 종속 작업을 재귀적으로 다시 시작하려면 각 작업을 개별적으로 활성화하는 대신 SYSTEM$TASK_DEPENDENTS_ENABLE 함수를 쿼리하십시오(ALTER TASK … RESUME 사용).
기본적으로, 트랜잭션을 명시적으로 시작하지 않고 실행되는 DML 문은 성공 시 자동으로 커밋되거나 문의 끝에서 실패 시 롤백됩니다. 이 동작을 자동 커밋 이라고 하며 AUTOCOMMIT 매개 변수로 제어합니다. 이 매개 변수는 반드시 TRUE로 설정해야 합니다. 계정 수준에서 AUTOCOMMIT 매개 변수를 FALSE로 설정한 경우에는 개별 작업에 대해 이 매개 변수를 TRUE로 설정하십시오(ALTER TASK … SET AUTOCOMMIT = TRUE 사용).
작업이 일시 중단되면 작업의 현재 실행(즉, TASK_HISTORY 출력에 EXECUTING 상태가 있는 실행)이 완료됩니다. 지정된 작업의 실행을 중단하려면 SYSTEM$USER_TASK_CANCEL_ONGOING_EXECUTIONS 함수를 실행하십시오.
작업의 개별 실행을 위한 컴퓨팅 리소스는 Snowflake(즉, 서버리스 컴퓨팅 모델) 또는 사용자 지정 가상 웨어하우스 둘 중 하나 에서 관리합니다. 웨어하우스에 의존하는 작업을 서버리스 컴퓨팅 모델로 변환하려면
WAREHOUSE
를 설정 해제하십시오.예기치 않은 오류로 작업이 실패하면 오류에 대한 알림을 받을 수 있습니다. 작업 오류 알림 구성에 대한 자세한 내용은 작업에 대한 오류 알림 활성화하기 섹션을 참조하십시오.
메타데이터 관련:
주의
고객은 Snowflake 서비스를 사용할 때 개인 데이터(사용자 오브젝트 제외), 민감한 데이터, 수출 통제 대상 데이터 또는 기타 규제 데이터가 메타데이터로 입력되지 않도록 해야 합니다. 자세한 내용은 Snowflake의 메타데이터 필드 섹션을 참조하십시오.
종료자 작업과 관해 다음 사항이 적용됩니다.
SET FINALIZE = <root task name>
을 지정하면 일반 작업이 해당 루트 작업과 연결된 종료자 작업으로 구성됩니다.UNSET FINALIZE
를 지정하면 종료자 작업이 일정이나 선행 작업이 없는 일반 독립 실행형 작업으로 다시 변경됩니다.종료자 작업에는 일정이나 선행 작업이 있어서는 안 됩니다. 결과적으로 작업에 대한
SET FINALIZE
가SET SCHEDULE
및ADD AFTER
와 충돌합니다. 기존 일정이나 선행 작업이 있는 작업도SET FINALIZE
쿼리에 실패합니다. 대상 루트 작업에 이미 종료자 작업이 있는 경우 ALTER는 이전 작업을 덮어쓰므로 대상 루트 작업에 새 종료자 작업이 포함됩니다.종료자 작업을 수정, 설정 또는 설정 해제하기 전에 루트 작업을 일시 중단해야 합니다.
예¶
다음은 작업을 시작하는 예입니다.
ALTER TASK mytask RESUME;
다음 예에서는 작업을 서버리스 컴퓨팅 모델로 변환하고 xsmall
을 작업의 첫 번째 서버리스 실행을 위해 프로비저닝할 컴퓨팅 리소스의 양으로 설정합니다.
ALTER TASK mytask UNSET WAREHOUSE;
ALTER TASK mytask SET USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = 'XSMALL';
다음은 작업이 실행되는 세션에 대한 TIMEZONE 및 CLIENT_TIMESTAMP_TYPE_MAPPING 세션 매개 변수를 설정하는 예입니다.
ALTER TASK mytask SET TIMEZONE = 'America/Los_Angeles', CLIENT_TIMESTAMP_TYPE_MAPPING = TIMESTAMP_LTZ;
다음은 작업에 대해 다른 일정을 설정하는 예입니다.
ALTER TASK mytask SET SCHEDULE = 'USING CRON */3 * * * * UTC';
다음은 mytask
하위 작업(pred_task1
, pred_task2
)에 대한 현재 선행 작업을 제거하고 다른 선행 작업(pred_task3
)으로 바꾸는 예입니다.
ALTER TASK mytask REMOVE AFTER pred_task1, pred_task2;
ALTER TASK mytask ADD AFTER pred_task3;
다음은 작업과 연결된 SQL 문을 변경하는 예입니다. 이 작업은 이제 실행될 때 CURRENT_VERSION 함수를 쿼리합니다.
ALTER TASK mytask MODIFY AS SELECT CURRENT_VERSION();
다음은 작업과 연결된 WHEN 조건을 수정하는 예입니다. (일정에 따라 또는 선행 작업이 성공적으로 실행된 후) 트리거되면, 이제는 mystream
스트림에 데이터가 포함된 경우에만 이 태스크가 실행됩니다.
ALTER TASK mytask MODIFY WHEN SYSTEM$STREAM_HAS_DATA('MYSTREAM');
새 구성 또는 대체 구성으로 기존 작업을 업데이트합니다.
ALTER TASK task_with_config SET
CONFIG=$${"output_directory": "/temp/prod_directory/", "environment": "prod"}$$;
기존 작업에서 구성을 제거합니다.
ALTER TASK task_with_config UNSET CONFIG;