카테고리:

데이터 파이프라인 DDL

CREATE TASK

현재/지정된 스키마에 새 작업을 만들거나 기존 작업을 대체합니다.

이 명령은 다음 베리언트도 지원합니다.

  • CREATE TASK … CLONE(기존 작업의 복제본을 생성함)

참고 항목:

ALTER TASK , DROP TASK , SHOW TASKS , DESCRIBE TASK

이 항목의 내용:

구문

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> }' ]
  [ 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> ]
  [ COPY GRANTS ]
  [ COMMENT = '<string_literal>' ]
  [ AFTER <string> [ , <string> , ... ] ]
[ WHEN <boolean_expr> ]
AS
  <sql>

베리언트 구문

CREATE TASK … CLONE

같은 매개 변수 값으로 새 작업을 만듭니다.

CREATE [ OR REPLACE ] TASK <name> CLONE <source_task>
  [ COPY GRANTS ]
  [ ... ]

자세한 내용은 CREATE <오브젝트> … CLONE 섹션을 참조하십시오.

필수 매개 변수

name

작업의 식별자(즉, 이름)를 지정하는 문자열로, 작업이 생성되는 스키마에 대해 고유해야 합니다.

또한, 식별자는 알파벳 문자로 시작해야 하며 전체 식별자 문자열을 큰따옴표(예: "My object")로 묶지 않는 한 공백이나 특수 문자를 포함할 수 없습니다. 큰따옴표로 묶인 식별자도 대/소문자를 구분합니다.

자세한 내용은 식별자 요구 사항 섹션을 참조하십시오.

sql

다음 중 하나:

  • 단일 SQL 문

  • 저장 프로시저 호출

  • Snowflake Scripting 를 사용한 절차 논리

    현재, Snowsight와 클래식 웹 인터페이스는 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에 의해 자동으로 크기가 조정되고 확장 또는 축소됩니다. 작업에 일정이 지정되면 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 ...

작업을 주기적으로 실행하기 위한 일정을 지정합니다.

참고

  • 독립 실행형 작업 또는 작업의 DAG 에 있는 루트 작업에 대해 반드시 일정을 정의해야 하며, 그렇지 않으면 EXECUTE TASK 를 사용하여 수동으로 실행하는 경우에만 작업이 실행됩니다.

  • DAG의 하위 작업에 대해 일정을 지정할 수 없습니다.

  • 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 구문을 지원합니다.

    모호성을 피하기 위해 다음과 같은 경우에 기본 간격 시간 이 설정됩니다.

    기본 간격 시간은 현재 시계 시간부터 간격 카운터를 시작합니다. 예를 들어, 10 의 INTERVAL 값이 설정되고 작업이 9:03 AM에 활성화되면 작업은 9:13 AM, 9:23 AM 등에 실행됩니다. 절대적인 정밀도 보장에 최선을 다하지만, 작업이 설정된 간격이 지나기 전에 실행되지 않는다는 점만 보장합니다(예: 현재 예에서, 작업은 9:14 AM에 처음 실행될 수 있겠지만, 9:12 AM에는 확실히 실행되지 않을 것임).

    참고

    지원되는 최대값은 11520 (8일)입니다. 더 큰 num MINUTE 값을 가진 작업은 실행되지 않습니다.

ALLOW_OVERLAPPING_EXECUTION = TRUE | FALSE

DAG의 여러 인스턴스를 동시에 실행하도록 허용할지 여부를 지정합니다.

참고

이 매개 변수는 루트 작업에서만 설정할 수 있습니다. 이 설정은 DAG의 모든 작업에 적용됩니다.

이 매개 변수는 독립 실행형 작업에서 설정할 수 있지만, 작업의 동작에는 영향을 주지 않습니다. Snowflake는 주어진 시간에 독립 실행형 작업의 인스턴스가 하나만 실행되도록 보장합니다.

  • TRUE 로 설정하면 주어진 시간에 루트 작업의 인스턴스가 하나만 실행됩니다. 다음으로 예약된 실행 시간이 발생할 때 루트 작업이 계속 실행 중이면 예약된 시간을 건너뜁니다. 이런 보장이 자식 작업까지 확대 적용되지는 않습니다. 하위 작업의 현재 실행이 여전히 작동 중인 동안 루트 작업의 다음으로 예약된 실행이 발생하면 DAG의 또 다른 인스턴스가 시작됩니다.

  • FALSE 로 설정하면 특정한 DAG의 인스턴스 하나만 한 번에 실행하도록 허용됩니다. DAG에 있는 모든 하위 작업의 실행이 완료된 후에만 루트 작업의 다음 실행이 예약됩니다. 이는 DAG의 모든 작업을 실행하는 데 필요한 누적 시간이 루트 작업의 정의에 설정된 명시적인 예약 시간을 초과할 경우 DAG의 실행을 한 번 이상 건너뛴다는 의미입니다.

기본값: 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 코드가 사용자 오류를 생성하거나 시간 초과되는 실행이 포함됩니다. 건너뛰거나 취소되거나 시스템 오류로 인해 실패하는 작업 실행은 쉽게 가늠할 수 없는 것으로 생각되어 실패한 작업 실행 수에는 포함하지 않습니다.

독립 실행형 작업 또는 DAG에서 루트 작업에 대한 매개 변수를 설정합니다. 매개 변수가 0 보다 큰 값으로 설정되면 독립 실행형 작업 또는 DAG의 실행에 다음 동작이 적용됩니다.

  • 독립 실행형 작업은 연속 작업 실행이 지정된 횟수만큼 실패하거나 시간 초과되면 자동으로 일시 중단됩니다.

  • 루트 작업은 DAG에서 임의의 단일 작업 실행이 실패하거나 연속 실행에서 지정된 횟수만큼 시간 초과되면 자동으로 일시 중단됩니다.

설정은 Snowflake 관리 컴퓨팅 리소스(예: 서버리스 컴퓨팅 모델) 또는 사용자 관리 컴퓨팅 리소스(즉, 가상 웨어하우스)에 의존하는 작업에 적용됩니다.

이 매개 변수에 대한 자세한 내용은 SUSPEND_TASK_AFTER_NUM_FAILURES 를 참조하십시오.

값: 0 - 상한 없음.

기본값: 0 (자동 일시 중단 없음)

ERROR_INTEGRATION = 'integration_name'

Amazon Simple Notification Service(SNS)를 사용하여 오류 알림을 보내도록 작업을 구성하는 경우에만 필요합니다. Amazon SNS와 통신하는 데 사용되는 알림 통합의 이름을 지정합니다. 자세한 내용은 작업에 대한 오류 알림 활성화하기 섹션을 참조하십시오.

COPY GRANTS

다음 CREATE TASK 베리언트 중 하나를 사용하여 새 작업을 만들 때 원본 작업의 액세스 허가를 유지하도록 지정합니다.

  • CREATE OR REPLACE TASK

  • CREATE TASK … CLONE

이 매개 변수는 OWNERSHIP을 제외한 모든 권한을 기존 작업에서 새 작업으로 복사합니다. 기본적으로, CREATE TASK 명령을 실행하는 역할은 새 작업을 소유합니다.

참고:

  • CREATE TASK 문이 둘 이상의 작업(예: create or replace task t1 clone t2;)을 참조하는 경우 COPY GRANTS 절은 바뀌는 작업을 우선합니다.

  • 대체 작업에 대한 SHOW GRANTS 출력에는 CREATE TASK 문이 실행될 때 현재 타임스탬프를 포함한 이 문을 실행한 역할로서 복사된 권한의 피부여자가 나열됩니다.

  • 권한 부여 복사 작업은 CREATE TASK 명령에서 원자적으로(즉, 같은 트랜잭션 내에서) 발생합니다.

참고

이 매개 변수는 현재 지원되지 않습니다.

COMMENT = 'string_literal'

작업에 대한 설명을 지정합니다.

기본값: 값 없음

AFTER string [ , string , ... ]

현재 작업에 대한 하나 이상의 선행 작업을 지정합니다. 이 옵션을 사용하여 작업의 DAG 를 생성하거나 이 작업을 기존 DAG에 추가합니다. DAG는 예약된 루트 작업으로 시작하고, 종속성에 의해 함께 연결된 일련의 작업입니다.

DAG의 구조는 모든 구성 요소 작업이 생성된 후에 정의할 수 있습니다. ALTER TASK … ADD AFTER 문을 실행하여, 계획된 DAG의 각 작업에 대한 선행 작업을 지정합니다.

작업은 모든 선행 작업이 자체 실행을 성공적으로 마친 후(잠깐의 지연 후) 실행됩니다.

참고

  • 루트 작업에는 정의된 일정이 있어야 합니다. 각 하위 작업은 작업을 함께 연결하기 위해 하나 이상의 정의된 선행 작업(즉, AFTER 매개 변수를 사용하여 지정된 작업)이어야 합니다.

  • 단일 작업은 100개의 선행 작업과 100개의 하위 작업으로 제한됩니다. 또한 DAG는 다시 시작 또는 일시 중단 상태에서 최대 1,000개의 작업(루트 작업 포함)으로 제한됩니다.

  • 계정은 현재 최대 10,000개의 다시 시작된 작업으로 제한됩니다.

  • DAG의 모든 작업은 작업 소유자가 같아야 합니다(즉, 단일 역할이 DAG의 모든 작업에 대한 OWNERSHIP 권한을 가져야 함).

  • DAG의 모든 작업은 같은 스키마에 있어야 합니다.

  • 어떤 작업이든 다시 생성(CREATE OR REPLACE TASK 사용)하거나 하위 작업을 추가(CREATE TASK … AFTER 또는 ALTER TASK … ADD AFTER 사용)하거나 제거(ALTER TASK … REMOVE AFTER 사용)하기 전에 루트 작업을 일시 중단해야 합니다.

  • DAG의 작업을 복제할 경우 작업을 복제하는 역할이 기본적으로 복제 소유자가 됩니다.

    • 원래 작업의 소유자가 복제본을 만들 경우 작업 복제본이 작업과 선행 작업 사이의 연결을 유지합니다. 이는 똑같은 선행 작업이 원래 작업과 작업 복제본을 모두 트리거함을 의미합니다.

    • 또 다른 역할이 복제본을 만들 경우에는 작업 복제본에 일정이 있을 수 있지만 선행 작업은 그렇지 않습니다.

  • 현재 제한 사항:

    • Snowflake는 일정이 정의된 작업의 인스턴스가 주어진 시간에 많아야 하나만 실행되도록 보장하지만, 정의된 선행 작업이 있는 작업에 대해서는 똑같이 보장할 수 없습니다.

WHEN boolean_expr

부울 SQL 식을 지정하는데, AND/OR로 조인된 여러 조건이 지원됩니다. (SCHEDULE 또는 AFTER 설정을 기준으로) 작업이 트리거되면 식의 조건을 검증하여 실행할지 여부를 결정합니다. 식의 조건이 충족되지 않으면 작업이 현재의 실행을 건너뜁니다. 이 작업을 선행 작업으로 식별하는 작업도 실행되지 않습니다.

SYSTEM$STREAM_HAS_DATA 는 SQL 식에서 계산에 지원되는 유일한 함수입니다. 이 함수는 지정된 스트림에 변경 내용 추적 데이터가 포함되어 있는지 여부를 나타냅니다. 작업은 현재 실행을 시작하기 전에 지정된 스트림에 변경 데이터가 있는지 여부를 평가합니다. 결과가 FALSE 이면 작업이 실행되지 않습니다. 이 함수는 가음성(즉, 스트림에 변경 데이터가 포함된 경우에도 false 값 반환)을 방지하도록 설계되었지만, 이 함수는 가양성(즉, 스트림에 변경 데이터가 포함되지 않은 경우 true 값 반환)을 방지하는 것으로 보장되지는 않습니다.

WHEN 식의 조건을 검증하는 데 컴퓨팅 리소스가 필요하지 않습니다. 대신에 검증은 클라우드 서비스 계층에서 처리됩니다. 작업이 WHEN 조건을 평가하고 실행되지 않을 때마다 명목 요금이 발생합니다. 요금은 작업이 실행될 때까지 트리거될 때마다 누적됩니다. 그때, 요금은 Snowflake 크레딧으로 변환되고 작업 실행에 대한 컴퓨팅 리소스 사용량에 추가됩니다.

일반적으로, 조건을 검증하는 계산 시간은 작업 실행 시간에 비해 무의미한 수준입니다. 예약된 작업과 실제 작업 실행을 최대한 가깝게 맞추는 것이 가장 좋은 방법입니다. 실제 작업 실행과 제대로 동기화되지 않는 작업 일정은 피하십시오. 예를 들어, 데이터가 대략 24시간마다 스트림이 있는 테이블에 삽입되는 경우 1분마다 스트림 데이터를 확인하는 작업을 예약하지 마십시오. 각 실행에서 WHEN 식을 검증하는 비용은 일반적으로 사소한 수준이지만, 요금이 누적됩니다.

컴퓨팅 리소스의 일일 사용량 중 10% 할당량 미만으로 떨어지는 클라우드 서비스의 일일 사용량에는 클라우드 서비스 요금이 누적되지 않습니다.

액세스 제어 요구 사항

이 SQL 명령을 실행하는 데 사용되는 역할 에는 최소한 다음 권한 이 있어야 합니다.

권한

오브젝트

참고

EXECUTE MANAGED TASK

계정

실행을 위해 Snowflake 관리 컴퓨팅 리소스에 의존하는 작업(서버리스 작업)에만 필요합니다.

CREATE TASK

스키마

USAGE

웨어하우스

실행을 위해 사용자 관리 웨어하우스에 의존하는 작업에만 필요합니다.

스키마의 모든 오브젝트에 대해 작업하려면 상위 데이터베이스 및 스키마에 대한 USAGE 권한도 필요합니다.

지정된 권한 세트로 사용자 지정 역할을 만드는 방법에 대한 지침은 사용자 지정 역할 만들기 섹션을 참조하십시오.

보안 오브젝트 에 대해 SQL 작업을 수행하기 위한 역할과 권한 부여에 대한 일반적인 정보는 Snowflake에서의 액세스 제어 섹션을 참조하십시오.

사용법 노트

  • 작업은 작업 소유자에게 부여된 권한(즉, 작업에 대한 OWNERSHIP 권한이 있는 역할)을 사용하여 실행됩니다. 작업을 실행하는 데 필요한 최소 권한 목록은 작업 보안 섹션을 참조하십시오.

    SQL 문을 실행하거나 저장 프로시저를 호출한 작업 정의에 포함하는 것이 좋습니다. 작업 소유자 역할로 이 스테이지를 완료하여 역할이 SQL에서 참조하는 모든 오브젝트에 대해 필요한 모든 권한을 갖도록 보장합니다.

  • 작업의 개별 실행을 위한 컴퓨팅 리소스는 Snowflake(즉, 서버리스 작업) 또는 사용자 지정 가상 웨어하우스 둘 중 하나 에서 관리합니다. 서버리스 작업을 사용하려면 CREATE TASK 문에서 WAREHOUSE = string 매개 변수를 생략하십시오.

    • 작업에 대한 Snowflake 관리 리소스의 범위는 웨어하우스 크기에서 XSMALL 에서 XXLARGE 에 해당합니다. 이 범위에 더 큰 웨어하우스 크기를 포함하려면 Snowflake 지원 에 문의하여 크기 증가를 요청하십시오.

    • DAG에서 하나 이상의 작업에 대해 서버리스 모델을 사용할 수 있습니다. DAG에서 개별 작업 실행은 Snowflake 또는 사용자 관리 컴퓨팅 리소스에 의존할 수 있습니다. DAG의 모든 작업에 대해 이 서버리스 컴퓨팅 모델을 활성화할 필요는 없습니다.

  • 작업을 만든 후. 반드시 ALTER TASK … RESUME를 실행해야 작업 정의에 지정된 매개 변수를 기반으로 작업이 실행됩니다. 계정은 현재 최대 10,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

매분. UTC 타임존.

0 2 * * * UTC

매일 밤 2 AM. UTC 타임존.

0 5,17 * * * UTC

매일 두 번, 5 AM 및 5 PM(매 정시). UTC 타임존.

30 2 L 6 * 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';

DAG에서 서버리스 하위 작업을 만들고 여러 선행 작업을 추가합니다. 하위 작업은 지정된 모든 선행 작업이 자체 실행을 성공적으로 완료한 후에만 실행됩니다.

DAG의 루트 작업이 task1 이고 task2, task3, task4task1 의 하위 작업이라고 가정합니다. 이 예제에서는 DAG에 하위 작업 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;
  $$;
맨 위로 이동