CREATE TASK¶
현재/지정된 스키마에 새 작업을 만들거나 기존 작업을 대체합니다.
이 명령은 다음 베리언트도 지원합니다.
CREATE TASK … CLONE(기존 작업의 복제본을 생성함)
- 참고 항목:
중요
새로 생성되거나 복제된 작업은 일시 중단됩니다. 일시 중단된 작업 재개에 대한 자세한 내용은 ALTER TASK … RESUME을 참조하십시오.
구문¶
CREATE [ OR REPLACE ] TASK [ IF NOT EXISTS ] <name>
[ { WAREHOUSE = <string> } | { USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = <string> } ]
[ SCHEDULE = '{ <num> MINUTE | USING CRON <expr> <time_zone> }' ]
[ CONFIG = <configuration_string> ]
[ ALLOW_OVERLAPPING_EXECUTION = TRUE | FALSE ]
[ <session_parameter> = <value> [ , <session_parameter> = <value> ... ] ]
[ USER_TASK_TIMEOUT_MS = <num> ]
[ SUSPEND_TASK_AFTER_NUM_FAILURES = <num> ]
[ ERROR_INTEGRATION = <integration_name> ]
[ COMMENT = '<string_literal>' ]
[ FINALIZE = <string> ]
[ TASK_AUTO_RETRY_ATTEMPTS = <num> ]
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
[ AFTER <string> [ , <string> , ... ] ]
[ WHEN <boolean_expr> ]
AS
<sql>
베리언트 구문¶
CREATE TASK … CLONE
같은 매개 변수 값으로 새 작업을 만듭니다.
CREATE [ OR REPLACE ] TASK <name> CLONE <source_task> [ ... ]
자세한 내용은 CREATE <오브젝트> … CLONE 섹션을 참조하십시오.
참고
CREATE TASK <이름> CLONE을 사용하여 작업을 복제하거나 작업을 포함하는 스키마를 복제하면 모든 기본 작업 속성이 명시적으로 재정의되지 않는 한 그대로 복사됩니다.
필수 매개 변수¶
name
작업의 식별자를 지정하는 문자열로, 작업이 생성되는 스키마에 대해 고유해야 합니다.
또한, 식별자는 알파벳 문자로 시작해야 하며 전체 식별자 문자열을 큰따옴표(예:
"My object"
)로 묶지 않는 한 공백이나 특수 문자를 포함할 수 없습니다. 큰따옴표로 묶인 식별자도 대/소문자를 구분합니다.자세한 내용은 식별자 요구 사항 섹션을 참조하십시오.
sql
다음 중 하나:
단일 SQL 문
저장 프로시저 호출
Snowflake Scripting 을 사용한 프로시저 논리
현재, Snowsight 와 Classic Console 는 Snowflake Scripting을 사용하기 위한 작업 생성 또는 수정을 지원하지 않습니다. 대신 SnowSQL 또는 다른 명령줄 클라이언트를 사용하십시오.
작업이 실행될 때 SQL 코드가 실행됩니다.
참고
SQL 코드는 자체적으로 실행 가능해야 합니다. 작업을 생성하기 전에
sql
항목이 예상대로 실행되는지 확인하는 것이 좋습니다. 작업은 이미 철저한 테스트를 거친 SQL 문과 저장 프로시저를 자동화하는 것이 그 취지입니다.서버리스 작업은 다음 오브젝트 유형을 호출할 수 없습니다.
Java 또는 Python 코드를 포함한 UDF(사용자 정의 함수).
Scala(Snowpark 사용)로 작성되거나 Java 또는 Python 코드가 포함된 UDF를 호출하는 저장 프로시저.
선택적 매개 변수¶
WAREHOUSE = string
또는 . USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = string
WAREHOUSE = string
작업 실행을 위한 컴퓨팅 리소스를 제공하는 가상 웨어하우스를 지정합니다.
이 작업 실행에 서버리스 컴퓨팅 리소스를 사용하려면 이 매개 변수를 생략합니다. Snowflake는 각 워크로드에 필요에 따라 서버리스 컴퓨팅 리소스의 크기를 자동으로 조정하고 확장합니다. 작업에 일정이 지정되면 Snowflake는 리소스 크기를 조정하여 지정된 시간 프레임 내에 작업의 향후 실행을 완료합니다. 작업의 초기 웨어하우스 크기를 지정하려면
USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = string
매개 변수를 설정하십시오.USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = string
서버리스 작업에만 적용됩니다.
Snowflake가 이상적인 크기를 결정하기 위해 작업 기록을 사용할 수 있기 전에, 작업의 첫 번째 실행을 위해 프로비저닝할 컴퓨팅 리소스의 크기를 지정합니다. 작업이 몇 번의 실행을 성공적으로 완료하면 Snowflake는 이 매개 변수 설정을 무시합니다.
주어진 작업에 대해 작업 기록을 사용할 수 없는 경우 컴퓨팅 리소스가 이 초기 크기로 되돌아갑니다.
참고
WAREHOUSE = string
매개 변수 값이 지정된 경우, 이 매개 변수를 설정하면 사용자 오류가 발생합니다.크기는 웨어하우스 생성(CREATE WAREHOUSE 사용) 시 사용 가능한 컴퓨팅 리소스와 동일하며
SMALL
,MEDIUM
또는LARGE
가 있습니다. 매개 변수가 지원하는 가장 큰 크기는XXLARGE
입니다. 매개 변수가 생략되면 작업의 첫 번째 실행은 중간 크기(MEDIUM
) 웨어하우스를 사용하여 실행됩니다.작업이 생성된 후이면서 성공적으로 한 번 실행되기 전에 초기 크기를 변경할 수 있습니다(ALTER TASK 사용). 이 작업의 첫 번째 실행이 시작된 후에 매개 변수를 변경하면 현재 또는 향후 작업 실행을 위한 컴퓨팅 리소스에 영향을 미치지 않습니다.
작업을 일시 중단하고 다시 시작해도 컴퓨팅 리소스 크기 조정에 사용된 작업 기록이 제거되지는 않습니다. 작업 기록은 작업이 다시 생성된 경우에만 제거됩니다(CREATE OR REPLACE TASK 구문 사용).
이 매개 변수에 대한 자세한 내용은 USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE 를 참조하십시오.
SCHEDULE ...
작업을 주기적으로 실행하기 위한 일정을 지정합니다.
참고
독립 실행형 작업 또는 작업 그래프 에 있는 루트 작업에 대해 반드시 일정을 정의해야 하며, 그렇지 않으면 EXECUTE TASK 를 사용하여 수동으로 실행하는 경우에만 작업이 실행됩니다.
작업 그래프의 하위 작업에 대해 일정을 지정할 수 없습니다.
USING CRON expr time_zone
작업을 주기적으로 실행하기 cron 식과 타임존을 지정합니다. 표준 cron 유틸리티 구문의 서브세트를 지원합니다.
타임존 목록은 (Wikipedia에서) tz 데이터베이스 타임존 목록 을 참조하십시오.
cron 식은 다음 필드로 구성됩니다.
# __________ minute (0-59) # | ________ hour (0-23) # | | ______ day of month (1-31, or L) # | | | ____ month (1-12, JAN-DEC) # | | | | _ day of week (0-6, SUN-SAT, or L) # | | | | | # | | | | | * * * * *
다음 특수 문자가 지원됩니다.
*
와일드카드. 필드의 모든 발생을 지정합니다.
L
“last(마지막)”를 의미합니다. day-of-month(요일) 필드에 사용하면 해당 월의 “마지막 금요일”(“5L”)과 같은 구문을 지정할 수 있습니다. day-of-month 필드에서는 해당 월의 마지막 요일을 지정합니다.
/n
주어진 시간 단위의 n번째 인스턴스를 나타냅니다. 시간의 각 양은 독립적으로 계산됩니다. 예를 들어, 월 필드에
4/3
이 지정된 경우 작업은 4월, 7월, 10월로 예약됩니다(즉, 해당 연도의 4번째 달부터 3개월마다). 다음 해에도 동일한 일정이 유지됩니다. 즉, 작업은 1월(10월 실행 후 3개월)에 실행되도록 예약되지 않습니다.
참고
cron 식은 현재 지정된 타임존에 대해서만 계산됩니다. 계정에 대한 TIMEZONE 매개 변수 값을 변경하거나 사용자 또는 세션 수준에서 값을 설정하더라도 작업의 타임존이 변경되지는 않습니다.
cron 식은 작업에 대해 유효한 모든 실행 시간을 정의합니다. Snowflake는 이 일정을 기준으로 작업을 실행하려 하지만, 그다음의 유효한 실행 시간이 시작되기 전에 이전 실행이 완료되지 않은 경우에는 유효한 실행 시간을 건너뜁니다.
한 달의 특정한 날과 요일이 모두 cron 식에 포함된 경우에는 그 날이나 요일 중 하나 를 만족하는 날짜에 작업이 예약됩니다. 예를 들어,
SCHEDULE = 'USING CRON 0 0 10-20 * TUE,THU UTC'
는 해당 월의 10일에서 20일 사이에서 0AM에 작업을 예약하고 해당 날짜 이외의 모든 화요일이나 목요일에도 작업을 예약합니다.cron에서 가장 짧은 시간 단위는 분입니다. 작업이 cron 식에 정의된 분 동안 재개될 경우 작업의 첫 번째 예약 실행은 다음 발생하는 cron 식 인스턴스입니다. 예를 들어, 매일 자정에 실행하도록 예약된 작업(
USING CRON 0 0 * * *
)이 자정에 5초를 더한 시간(00:00:05
)에 재개되는 경우 첫 번째 작업 실행은 다음 자정으로 예약됩니다.
num MINUTE
작업 실행 사이에 삽입되는 대기 시간의 간격(분)을 지정합니다. 양의 정수만 허용합니다.
또한
num M
구문을 지원합니다.모호성을 피하기 위해 다음과 같은 경우에 기본 간격 시간 이 설정됩니다.
(ALTER TASK … RESUME 을 사용하여) 작업이 다시 시작될 때 또는
(ALTER TASK … SET SCHEDULE 을 사용하여) 다른 간격이 설정될 때
기본 간격 시간은 현재 시계 시간부터 간격 카운터를 시작합니다. 예를 들어,
10
의 INTERVAL 값이 설정되고 작업이 9:03 AM에 활성화되면 작업은 9:13 AM, 9:23 AM 등에 실행됩니다. 저희는 절대적인 정확성을 보장하기 위해 최선을 다하지만, 설정된 주기 이전에 작업이 실행되지 않는다는 것만 보장합니다. 예를 들어, 현재 예에서 작업은 9:14 AM에 처음 실행될 수 있지만 9:12 AM에는 실행되지 않습니다.참고
지원되는 최대값은
11520
(8일)입니다. 더 큰num MINUTE
값을 가진 작업은 실행되지 않습니다.
CONFIG = configuration_string
작업 그래프의 모든 작업에서 액세스할 수 있는 키 값 페어의 문자열 표현을 지정합니다. JSON 형식으로 되어 있어야 합니다. 현재 실행 중인 작업의 구성 문자열을 가져오는 방법에 대한 자세한 내용은 SYSTEM$GET_TASK_GRAPH_CONFIG 섹션을 참조하십시오.
참고
이 매개 변수는 루트 작업에서만 설정할 수 있습니다. 이 설정은 작업 그래프의 모든 작업에 적용됩니다.
이 매개 변수는 독립 실행형 작업에서 설정할 수 있지만, 작업의 동작에는 영향을 주지 않습니다. Snowflake는 주어진 시간에 독립 실행형 작업의 인스턴스가 하나만 실행되도록 보장합니다.
ALLOW_OVERLAPPING_EXECUTION = TRUE | FALSE
작업 그래프의 여러 인스턴스를 동시에 실행하도록 허용할지 여부를 지정합니다.
참고
이 매개 변수는 루트 작업에서만 설정할 수 있습니다. 이 설정은 작업 그래프의 모든 작업에 적용됩니다.
이 매개 변수는 독립 실행형 작업에서 설정할 수 있지만, 작업의 동작에는 영향을 주지 않습니다. Snowflake는 주어진 시간에 독립 실행형 작업의 인스턴스가 하나만 실행되도록 보장합니다.
TRUE
로 설정하면 주어진 시간에 루트 작업의 인스턴스가 하나만 실행됩니다. 다음으로 예약된 실행 시간이 발생할 때 루트 작업이 계속 실행 중이면 예약된 시간을 건너뜁니다. 이 보장은 하위 작업으로 확장되지 않습니다. 하위 작업의 현재 실행이 여전히 작동 중인 동안 루트 작업의 다음으로 예약된 실행이 발생하면 작업 그래프의 또 다른 인스턴스가 시작됩니다.FALSE
로 설정하면 특정한 작업 그래프의 인스턴스 하나만 한 번에 실행하도록 허용됩니다. 작업 그래프에 있는 모든 하위 작업의 실행이 완료된 후에만 루트 작업의 다음 실행이 예약됩니다. 이는 작업 그래프의 모든 작업을 실행하는 데 필요한 누적 시간이 루트 작업의 정의에 설정된 명시적인 예약 시간을 초과할 경우 작업 그래프의 실행을 한 번 이상 건너뛴다는 의미입니다.
기본값:
FALSE
session_parameter = value [ , session_parameter = value ... ]
작업 실행 시 세션에 대해 설정할 세션 매개 변수의 쉼표로 구분된 목록을 지정합니다. 작업은 모든 세션 매개 변수를 지원합니다. 전체 목록은 세션 매개 변수 를 참조하십시오.
USER_TASK_TIMEOUT_MS = num
시간이 초과되기 전에 작업의 단일 실행에 대한 시간 제한(밀리초)을 지정합니다.
참고
작업에 대한 시간 제한을 크게 늘리기 전에 해당 작업에 의해 시작된 SQL 문을 (문을 다시 작성하거나 저장 프로시저를 사용하여) 최적화할 수 있는지 여부 또는 웨어하우스 크기를 늘려야 할지 여부를 고려하십시오.
어떤 상황에서는 매개 변수 STATEMENT_TIMEOUT_IN_SECONDS의 우선순위가 USER_TASK_TIMEOUT_MS보다 높습니다. 자세한 내용은 STATEMENT_TIMEOUT_IN_SECONDS 섹션을 참조하십시오.
이 매개 변수에 대한 자세한 내용은 USER_TASK_TIMEOUT_MS 를 참조하십시오.
값:
0
-86400000
(1일).기본값:
3600000
(1시간)SUSPEND_TASK_AFTER_NUM_FAILURES = num
현재 작업을 자동으로 일시 중단하는 조치를 취할 연속 작업 실행 실패 횟수를 지정합니다. 실패한 작업 실행에는 작업 본문의 SQL 코드가 사용자 오류를 생성하거나 시간 초과되는 실행이 포함됩니다. 건너뛰거나 취소되거나 시스템 오류로 인해 실패하는 작업 실행은 쉽게 가늠할 수 없는 것으로 생각되어 실패한 작업 실행 수에는 포함하지 않습니다.
독립 실행형 작업 또는 작업 그래프에서 루트 작업에 대한 매개 변수를 설정합니다. 매개 변수가
0
보다 큰 값으로 설정되면 독립 실행형 작업 또는 작업 그래프의 실행에 다음 동작이 적용됩니다.독립 실행형 작업은 연속 작업 실행이 지정된 횟수만큼 실패하거나 시간 초과되면 자동으로 일시 중단됩니다.
루트 작업은 작업 그래프에서 임의의 단일 작업 실행이 실패하거나 연속 실행에서 지정된 횟수만큼 시간 초과되면 자동으로 일시 중단됩니다.
매개 변수가
0
으로 설정되면 실패한 작업이 자동으로 일시 중단되지 않습니다.이 설정은 서버리스 컴퓨팅 리소스 또는 가상 웨어하우스 컴퓨팅 리소스를 사용하는 작업에 적용됩니다.
이 매개 변수에 대한 자세한 내용은 SUSPEND_TASK_AFTER_NUM_FAILURES 를 참조하십시오.
값:
0
- 상한 없음.기본값:
10
ERROR_INTEGRATION = 'integration_name'
Amazon Simple Notification Service(SNS), Microsoft Azure Event Grid 또는 Google Pub/Sub를 사용하여 오류 알림을 보내도록 작업을 구성하는 경우에만 필요합니다.
Amazon SNS, MS Azure Event Grid 또는 Google Pub/Sub로 통신하는 데 사용되는 알림 통합의 이름을 지정합니다. 자세한 내용은 작업에 대한 오류 알림 활성화하기 섹션을 참조하십시오.
COMMENT = 'string_literal'
작업에 대한 설명을 지정합니다.
기본값: 값 없음
AFTER string [ , string , ... ]
현재 작업에 대한 하나 이상의 선행 작업을 지정합니다. 이 옵션을 사용하여 작업 그래프 를 생성하거나 이 작업을 기존 작업 그래프에 추가합니다. 작업 그래프는 예약된 루트 작업으로 시작하고, 종속성에 의해 함께 연결된 일련의 작업입니다.
작업 그래프의 구조는 모든 구성 요소 작업이 생성된 후에 정의할 수 있습니다. ALTER TASK … ADD AFTER 문을 실행하여, 계획된 작업 그래프의 각 작업에 대한 선행 작업을 지정합니다.
작업은 모든 선행 작업이 자체 실행을 성공적으로 마친 후(잠깐의 지연 후) 실행됩니다.
참고
루트 작업에는 정의된 일정이 있어야 합니다. 각 하위 작업에는 작업을 함께 연결하기 위해
AFTER
매개 변수를 사용하여 지정된 하나 이상의 정의된 선행 작업이 있어야 합니다.단일 작업은 100개의 선행 작업과 100개의 하위 작업으로 제한됩니다. 또한 작업 그래프는 다시 시작 또는 일시 중단 상태에서 최대 총 1,000개의 작업(루트 작업 포함)으로 제한됩니다.
계정은 현재 최대 30,000개의 다시 시작된 작업으로 제한됩니다.
작업 그래프의 모든 작업에는 동일한 작업 소유자가 있어야 합니다. 단일 역할에는 작업 그래프의 모든 작업에 대한 OWNERSHIP 권한이 있어야 합니다.
작업 그래프의 모든 작업은 같은 스키마에 있어야 합니다.
어떤 작업이든 다시 생성(CREATE OR REPLACE TASK 사용)하거나 하위 작업을 추가(CREATE TASK … AFTER 또는 ALTER TASK … ADD AFTER 사용)하거나 제거(ALTER TASK … REMOVE AFTER 사용)하기 전에 루트 작업을 일시 중단해야 합니다.
작업 그래프의 작업을 복제할 경우 작업을 복제하는 역할이 기본적으로 복제 소유자가 됩니다.
원래 작업의 소유자가 복제본을 만들 경우 작업 복제본이 작업과 선행 작업 사이의 연결을 유지합니다. 이는 똑같은 선행 작업이 원래 작업과 작업 복제본을 모두 트리거함을 의미합니다.
또 다른 역할이 복제본을 만들 경우에는 작업 복제본에 일정이 있을 수 있지만 선행 작업은 그렇지 않습니다.
현재 제한 사항:
Snowflake는 일정이 정의된 작업의 인스턴스가 주어진 시간에 많아야 하나만 실행되도록 보장하지만, 정의된 선행 작업이 있는 작업에 대해서는 똑같이 보장할 수 없습니다.
WHEN boolean_expr
부울 SQL 식을 지정하는데, AND/OR로 조인된 여러 조건이 지원됩니다. (
SCHEDULE
또는AFTER
설정을 기준으로) 작업이 트리거되면 식의 조건을 검증하여 실행할지 여부를 결정합니다. 식의 조건이 충족되지 않으면 작업이 현재의 실행을 건너뜁니다. 이 작업을 선행 작업으로 식별하는 작업도 실행되지 않습니다.작업 WHEN 절에서는 다음이 지원됩니다.
SQL 식에서 평가를 위해 SYSTEM$STREAM_HAS_DATA 가 지원됩니다.
이 함수는 지정된 스트림에 변경 내용 추적 데이터가 포함되어 있는지 여부를 나타냅니다. 이 함수를 사용하여 현재 실행을 시작하기 전에 지정된 스트림에 변경 데이터가 있는지 여부를 평가할 수 있습니다. 결과가 FALSE이면 작업이 실행되지 않습니다.
참고
SYSTEM$STREAM_HAS_DATA 는 스트림에 변경 데이터가 포함되어 있더라도 FALSE 값 반환을 방지하려고 설계되었습니다. 그러나 이 함수가 스트림에 변경 데이터가 없을 때 TRUE 값 반환을 방지할 것이라는 보장은 없습니다.
SQL 식에서 평가를 위해 SYSTEM$GET_PREDECESSOR_RETURN_VALUE 가 지원됩니다.
이 함수는 작업 그래프에서 선행 작업에 대한 반환 값을 검색합니다. 반환 값을 부울 식의 일부로 사용할 수 있습니다. SYSTEM$GET_PREDECESSOR_RETURN_VALUE를 사용할 때 필요한 경우 반환된 값을 적절한 숫자, 문자열 또는 부울 타입으로 캐스트할 수 있습니다.
간단한 예로 다음과 같은 것이 있습니다.
WHEN NOT SYSTEM$GET_PREDECESSOR_RETURN_VALUE('task_name')::BOOLEAN
WHEN SYSTEM$GET_PREDECESSOR_RETURN_VALUE('task_name') != 'VALIDATION'
WHEN SYSTEM$GET_PREDECESSOR_RETURN_VALUE('task_name')::FLOAT < 0.2
참고
TASK … WHEN 식에서 PARSE_JSON 사용은 웨어하우스 기반 컴퓨팅 리소스가 필요하므로 지원되지 않습니다.
AND, OR, NOT 등의 부울 연산자.
숫자, 문자열 및 부울 타입 간의 캐스트.
같음, 같지 않음, 초과, 미만 등의 비교 연산자.
WHEN 식의 조건을 검증하는 데 컴퓨팅 리소스가 필요하지 않습니다. 대신에 검증은 클라우드 서비스 계층에서 처리됩니다. 작업이 WHEN 조건을 평가하고 실행되지 않을 때마다 명목 요금이 발생합니다. 요금은 작업이 실행될 때까지 트리거될 때마다 누적됩니다. 그때, 요금은 Snowflake 크레딧으로 변환되고 작업 실행에 대한 컴퓨팅 리소스 사용량에 추가됩니다.
일반적으로, 조건을 검증하는 계산 시간은 작업 실행 시간에 비해 무의미한 수준입니다. 예약된 작업과 실제 작업 실행을 최대한 가깝게 맞추는 것이 가장 좋은 방법입니다. 작업 실행과 일치하지 않는 작업 일정을 피하십시오. 예를 들어, 데이터가 대략 24시간마다 스트림이 있는 테이블에 삽입되는 경우 1분마다 스트림 데이터를 확인하는 작업을 예약하지 마십시오. 각 실행에서 WHEN 식을 검증하는 비용은 일반적으로 사소한 수준이지만, 요금이 누적됩니다.
컴퓨팅 리소스의 일일 사용량 중 10% 할당량 미만으로 떨어지는 클라우드 서비스의 일일 사용량에는 클라우드 서비스 요금이 누적되지 않습니다.
TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )
태그 이름과 태그 문자열 값을 지정합니다.
태그 값은 항상 문자열이며, 태그 값의 최대 문자 수는 256자입니다.
문에서 태그를 지정하는 방법에 대한 자세한 내용은 오브젝트 및 열에 대한 태그 할당량 섹션을 참조하십시오.
FINALIZE = string
종료자 작업과 연결된 루트 작업의 이름을 지정합니다. 종료자 작업은 작업 그래프에서 활용하는 리소스의 릴리스와 정리를 처리합니다. 그래프가 실행되면 종료자 작업의 실행이 보장됩니다. 그러나 그래프를 건너뛰는 경우(예: 루트 작업을 건너뛰는 경우) 종료자 작업은 실행되지 않습니다.
루트 작업에는 종료자 작업이 하나만 있을 수 있습니다. 루트 작업에 대해 종료자 작업을 여러 개 생성하면 작업 생성이 실패합니다.
종료자 작업에는 하위 작업이 있을 수 없습니다. 종료자 작업을 선행 작업으로 만들려는 모든 명령이 실패합니다.
종료자 작업에는 일정이 있을 수 없습니다. 일정을 사용한 종료자 작업 생성이 실패합니다.
기본값: 값 없음
TASK_AUTO_RETRY_ATTEMPTS = num
자동 작업 그래프 재시도 횟수를 지정합니다. 작업 그래프가 FAILED 상태로 완료되면 Snowflake는 실패한 그래프의 마지막 작업부터 작업 그래프를 자동으로 다시 시도할 수 있습니다.
자동 작업 그래프 재시도는 기본적으로 비활성화됩니다. 이 기능을 활성화하려면 작업 그래프의 루트 작업에서 TASK_AUTO_RETRY_ATTEMPTS를
0
보다 큰 값으로 설정하십시오.이 매개 변수는 작업 그래프의 루트 작업으로 설정해야 합니다. 이 매개 변수가 하위 작업으로 설정된 경우 오류가 반환됩니다.
값:
0
-30
.기본값:
0
액세스 제어 요구 사항¶
이 SQL 명령을 실행하는 데 사용되는 역할 에는 최소한 다음 권한 이 있어야 합니다.
권한 |
오브젝트 |
참고 |
---|---|---|
EXECUTE MANAGED TASK |
계정 |
실행을 위해 서버리스 컴퓨팅 리소스에 의존하는 작업에만 필요합니다. |
CREATE TASK |
스키마 |
|
USAGE |
웨어하우스 |
실행을 위해 사용자 관리 웨어하우스에 의존하는 작업에만 필요합니다. |
스키마의 모든 오브젝트에 대해 작업하려면 상위 데이터베이스 및 스키마에 대한 USAGE 권한도 필요합니다.
지정된 권한 세트로 사용자 지정 역할을 만드는 방법에 대한 지침은 사용자 지정 역할 만들기 섹션을 참조하십시오.
보안 오브젝트 에 대해 SQL 작업을 수행하기 위한 역할과 권한 부여에 대한 일반적인 정보는 액세스 제어의 개요 섹션을 참조하십시오.
사용법 노트¶
작업은 작업 소유자의 권한을 사용하여 실행됩니다. 작업을 실행하는 데 필요한 최소 권한 목록은 작업 보안 섹션을 참조하십시오.
SQL 문을 실행하거나 저장 프로시저를 호출한 후 작업 정의에 포함하는 것이 좋습니다. 작업 소유자 역할로 이 스테이지를 완료하여 역할이 SQL에서 참조하는 모든 오브젝트에 대해 필요한 모든 권한을 갖도록 보장합니다.
작업의 개별 실행을 위한 컴퓨팅 리소스는 서버리스 작업 또는 사용자 지정 가상 웨어하우스 둘 중 하나 입니다. 서버리스 작업을 사용하려면 CREATE TASK 문에서
WAREHOUSE = string
매개 변수를 생략하십시오.작업에 대한 서버리스 컴퓨팅 리소스의 범위는 웨어하우스 크기에서
XSMALL
에서XXLARGE
에 해당합니다. 이 범위에 더 큰 웨어하우스 크기를 포함하려면 Snowflake 지원 에 문의하여 크기 증가를 요청하십시오.작업 그래프에서 하나 이상의 작업에 대해 서버리스 모델을 사용할 수 있습니다. 작업 그래프에서 개별 작업 실행은 서버리스 또는 사용자 관리 컴퓨팅 리소스에 의존할 수 있습니다. 작업 그래프의 모든 작업에 대해 이 서버리스 컴퓨팅 모델을 활성화할 필요는 없습니다.
작업을 만든 후. 반드시 ALTER TASK … RESUME를 실행해야 작업 정의에 지정된 매개 변수를 기반으로 작업이 실행됩니다. 계정은 현재 최대 30,000개의 다시 시작된 작업으로 제한됩니다.
그 밖에도, 작업이 복제될 때 복제된 작업의 실행은 기본적으로 일시 중단되며 똑같은 명령을 사용하여 실행을 명시적으로 활성화해야 합니다.
예기치 않은 오류로 작업이 실패하면 오류에 대한 알림을 받을 수 있습니다. 작업 오류 알림 구성에 대한 자세한 내용은 작업에 대한 오류 알림 활성화하기 섹션을 참조하십시오.
기본적으로, 트랜잭션을 명시적으로 시작하지 않고 실행되는 DML 문은 성공 시 자동으로 커밋되거나 문의 끝에서 실패 시 롤백됩니다. 이 동작을 자동 커밋 이라고 하며 AUTOCOMMIT 매개 변수로 제어합니다. 이 매개 변수는 반드시 TRUE로 설정해야 합니다. 계정 수준에서 AUTOCOMMIT 매개 변수를 FALSE로 설정한 경우에는 개별 작업에 대해 이 매개 변수를 TRUE로 설정하십시오(ALTER TASK … SET AUTOCOMMIT = TRUE 사용). 그렇지 않으면 작업에서 실행한 모든 DML 문이 실패합니다.
단일 테이블 스트림에서 변경 데이터를 사용하는 여러 작업이 서로 다른 델타를 불러옵니다. 작업이 DML 문을 사용하여 스트림의 변경 데이터를 사용할 때 스트림은 오프셋을 이동합니다. 사용할 다음 작업의 경우 더 이상 변경 데이터를 사용할 수 없습니다. 현재로서는, 단일 작업만 스트림의 변경 데이터를 사용하는 것이 좋습니다. 같은 테이블에 대해 여러 스트림을 만들고 다양한 작업에서 이들을 사용할 수 있습니다.
CREATE OR REPLACE 구문을 사용할 때, 기존의 작업이 삭제되고 지정된 정의를 사용하여 다시 만들어집니다. 다음 동작에 유의하십시오.
다시 생성된 작업은 기본적으로 일시 중단됩니다.
작업의 현재 실행(예: TASK_HISTORY 출력에 EXECUTING 상태를 가진 실행)이 완료됩니다. 지정된 작업의 실행을 중단하려면 SYSTEM$USER_TASK_CANCEL_ONGOING_EXECUTIONS 함수를 실행하십시오.
독립 실행형 작업 또는 루트 작업이 다시 생성되면 예약된 다음 작업의 실행이 취소됩니다.
CREATE OR REPLACE <오브젝트> 문은 원자성입니다. 즉, 오브젝트가 바뀔 때 단일 트랜잭션으로 이전 오브젝트가 삭제되고 새 오브젝트가 생성됩니다.
메타데이터 관련:
주의
고객은 Snowflake 서비스를 사용할 때 개인 데이터(사용자 오브젝트 제외), 민감한 데이터, 수출 통제 대상 데이터 또는 기타 규제 데이터가 메타데이터로 입력되지 않도록 해야 합니다. 자세한 내용은 Snowflake의 메타데이터 필드 섹션을 참조하십시오.
예¶
단일 SQL 문¶
일요일 오전 9시에 시작하여 오후 5시에 끝나는 매시간 현재 타임스탬프를 쿼리하는 서버리스 작업을 생성합니다(미국/로스앤젤레스 타임존).
초기 웨어하우스 크기는 XSMALL입니다.
CREATE TASK t1
SCHEDULE = 'USING CRON 0 9-17 * * SUN America/Los_Angeles'
USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = 'XSMALL'
AS
SELECT CURRENT_TIMESTAMP;
이전 예와 동일하지만, 작업은 실행을 위한 컴퓨팅 리소스를 제공하기 위해 사용자 관리 웨어하우스에 의존합니다.
CREATE TASK mytask_hour
WAREHOUSE = mywh
SCHEDULE = 'USING CRON 0 9-17 * * SUN America/Los_Angeles'
AS
SELECT CURRENT_TIMESTAMP;
추가 타이밍 예:
SCHEDULE 값 |
설명 |
---|---|
|
매분. UTC 타임존. |
|
매일 밤 2 AM. UTC 타임존. |
|
매일 두 번, 5 AM 및 5 PM(매 정시). UTC 타임존. |
|
6월의 마지막 날 2:30 AM. UTC 타임존. |
현재 타임스탬프를 1시간마다 테이블에 삽입하는 서버리스 작업을 만듭니다. 이 작업은 작업이 실행되는 세션에 대한 TIMESTAMP_INPUT_FORMAT 매개 변수를 설정합니다. 이 세션 매개 변수는 삽입된 타임스탬프의 형식을 지정합니다.
CREATE TASK t1
SCHEDULE = '60 MINUTE'
TIMESTAMP_INPUT_FORMAT = 'YYYY-MM-DD HH24'
USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = 'XSMALL'
AS
INSERT INTO mytable(ts) VALUES(CURRENT_TIMESTAMP);
현재 타임스탬프를 5분마다 테이블에 삽입하는 작업을 만듭니다.
CREATE TASK mytask_minute
WAREHOUSE = mywh
SCHEDULE = '5 MINUTE'
AS
INSERT INTO mytable(ts) VALUES(CURRENT_TIMESTAMP);
5분마다 INSERT 작업에 대한 변경 내용 추적 데이터를 스트림에서 테이블로 삽입하는 작업을 만듭니다. 이 작업은 SYSTEM$STREAM_HAS_DATA 함수를 사용해 스트림을 폴링하여 변경 데이터가 있는지 확인하고, 결과가 FALSE
이면 현재 실행을 건너뜁니다.
CREATE TASK mytask1
WAREHOUSE = mywh
SCHEDULE = '5 minute'
WHEN
SYSTEM$STREAM_HAS_DATA('MYSTREAM')
AS
INSERT INTO mytable1(id,name) SELECT id, name FROM mystream WHERE METADATA$ACTION = 'INSERT';
작업 그래프에서 서버리스 하위 작업을 만들고 여러 선행 작업을 추가합니다. 하위 작업은 지정된 모든 선행 작업이 자체 실행을 성공적으로 완료한 후에만 실행됩니다.
작업 그래프의 루트 작업이 task1
이고 task2
, task3
, task4
가 task1
의 하위 작업이라고 가정합니다. 이 예제에서는 작업 그래프에 하위 작업 task5
를 추가하고 task2
, task3
, task4
를 선행 작업으로 지정합니다.
-- Create task5 and specify task2, task3, task4 as predecessors tasks.
-- The new task is a serverless task that inserts the current timestamp into a table column.
CREATE TASK task5
AFTER task2, task3, task4
AS
INSERT INTO t1(ts) VALUES(CURRENT_TIMESTAMP);
저장 프로시저¶
매시간 (COPY INTO <위치> 을 사용해) mytable
테이블에서 명명된 mystage
스테이지로 데이터를 언로딩하기 위해 저장 프로시저를 호출하고 my_copy_task
로 명명된 작업을 만듭니다.
-- Create a stored procedure that unloads data from a table
-- The COPY statement in the stored procedure unloads data to files in a path identified by epoch time (using the Date.now() method)
CREATE OR REPLACE PROCEDURE my_unload_sp()
returns string not null
language javascript
AS
$$
var my_sql_command = ""
var my_sql_command = my_sql_command.concat("copy into @mystage","/",Date.now(),"/"," from mytable overwrite=true;");
var statement1 = snowflake.createStatement( {sqlText: my_sql_command} );
var result_set1 = statement1.execute();
return my_sql_command; // Statement returned for info/debug purposes
$$;
-- Create a task that calls the stored procedure every hour
CREATE TASK my_copy_task
WAREHOUSE = mywh
SCHEDULE = '60 minute'
AS
CALL my_unload_sp();
SnowSQL을 사용한 다중 SQL 문¶
다중 SQL 문을 실행하는 작업을 만듭니다. 이 예에서 작업은 세션의 TIMESTAMP_OUTPUT_FORMAT을 수정한 다음 CURRENT_TIMESTAMP 함수를 쿼리합니다.
참고
작업 정의의 SQL 코드는 여러 문을 포함합니다. CREATE TASK 문을 실행하려면 세미콜론 이외의 문자를 임시로 SQL 문에 대한 구분 기호로 설정해야 합니다. 그렇지 않으면 CREATE TASK 문은 사용자 오류를 반환합니다. SnowSQL에서 SQL 구분 기호를 변경하는 명령은 !set sql_delimiter = < 문자>
입니다.
!set sql_delimiter=/
CREATE OR REPLACE TASK test_logging
USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = 'XSMALL'
SCHEDULE = 'USING CRON 0 * * * * America/Los_Angeles'
AS
BEGIN
ALTER SESSION SET TIMESTAMP_OUTPUT_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF';
SELECT CURRENT_TIMESTAMP;
END;/
!set sql_delimiter=";"
Snowflake Scripting을 사용한 프로시저 논리¶
변수를 선언하고 변수를 사용하며 2분마다 변수 값을 반환하는 작업을 만듭니다.
CREATE TASK t1
USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = 'XSMALL'
SCHEDULE = '2 minute'
AS
EXECUTE IMMEDIATE
$$
DECLARE
radius_of_circle float;
area_of_circle float;
BEGIN
radius_of_circle := 3;
area_of_circle := pi() * radius_of_circle * radius_of_circle;
return area_of_circle;
END;
$$;
구성이 있는 루트 작업¶
구성을 지정하는 작업을 만든 다음 해당 구성을 읽습니다.
CREATE OR REPLACE TASK root_task_with_config
WAREHOUSE=mywarehouse
SCHEDULE='10 m'
CONFIG=$${"output_dir": "/temp/test_directory/", "learning_rate": 0.1}$$
AS
BEGIN
LET OUTPUT_DIR STRING := SYSTEM$GET_TASK_GRAPH_CONFIG('output_directory')::string;
LET LEARNING_RATE DECIMAL := SYSTEM$GET_TASK_GRAPH_CONFIG('learning_rate:v1')::DECIMAL;
...
END;
종료자 작업¶
작업 완료 후 이메일 경고를 보내는 작업 그래프의 루트 작업과 연결된 종료자 작업을 생성합니다. 종료자 작업에 대한 자세한 내용은 종료자 작업 섹션을 참조하십시오.
CREATE TASK finalize_task
WAREHOUSE = my_warehouse
FINALIZE = my_root_task
AS
CALL SYSTEM$SEND_EMAIL(
'my_email_int',
'first.last@example.com, first2.last2@example.com',
'Email Alert: Task A has finished.',
'Task A has successfully finished.\nStart Time: 10:10:32\nEnd Time: 12:15:45\nTotal Records Processed: 115678'
);