EXECUTE TASK

EXECUTE TASK

태스크에 정의된 일정과 무관하게 (독립형 태스크 또는 태스크 그래프의 루트 태스크)의 비동기 단일 실행을 수동으로 트리거하는 명령이에요. 루트 태스크의 성공적인 실행은 선행 태스크가 완료됨에 따라 태스크 그래프의 하위 태스크의 연쇄 실행을 트리거하며, 루트 태스크가 정의된 일정에 실행된 것처럼 동작해요. 또한 이전에 실패한 태스크의 재실행을 수동으로 트리거할 수도 있어요.

출처: 문서

본문

구문 (Syntax)

EXECUTE TASK <name>
  [ USING CONFIG = <configuration_string> ]

EXECUTE TASK <name> RETRY LAST

EXECUTE TASK <name> RETRY GRAPH RUN GROUP '<graph_run_group_id>'

파라미터

  • name — 실행할 독립형 태스크 또는 루트 태스크의 식별자예요. 식별자에 공백이나 특수 문자가 포함되면 전체 문자열을 큰따옴표로 묶어야 해요. 큰따옴표로 묶은 식별자는 대소문자를 구분해요.
  • USING CONFIG = configuration_string — 이번 단일 실행을 위해 유효한 JSON 형식의 구성 문자열을 지정해요. 이 파라미터는 동적으로 지정된 구성으로 새 실행을 만들지만 태스크 정의를 수정하지는 않아요. Snowflake는 동적 구성을 기본 구성(CREATE 또는 ALTER로 태스크 정의에 설정한 CONFIG 파라미터)과 병합해요. 일치하는 필드에는 동적으로 지정된 값을, 일치하지 않는 필드에는 기본 구성의 값을 사용해요. 구성 문자열은 CREATE TASK 또는 ALTER TASK의 CONFIG 파라미터와 같은 형식을 따라요:
CONFIG = $${"string1": value1 [, "string2": value2, ...] }$$

예시:

CONFIG = $${"learning_rate": 0.2, "environment": "testing"}$$
  • RETRY LAST — 태스크 그래프에서 실패한 마지막 태스크에서부터 시작하여 이름이 지정된 태스크를 재실행해요. 재실행하려면 다음 조건이 충족되어야 해요:
    • 마지막 태스크 그래프 실행이 FAILED 또는 CANCELED 상태여야 함.
    • 마지막 실행 이후 태스크 그래프가 수정되지 않았어야 함.
    • 마지막 실패한 그래프 실행의 첫 번째 시도가 지난 14일 이내에 실행되었어야 함.

    참고: RETRY LAST는 마지막 실패한 태스크에서 실행을 시작하는 새 그래프 실행을 만들어요. 특히 모든 FAILED 또는 CANCELED 태스크 실행이 즉시 재실행되고, 모든 선행자가 성공적으로 실행되면 관련 하위 태스크가 예약돼요. 또한 재시도로 생성된 새 태스크 그래프 실행은 이전 실패한 그래프 실행보다 1 큰 ATTEMPT NUMBER를 가지며, 재시도된/원래 태스크 그래프 실행과 동일한 GRAPH_RUN_GROUP_ID를 공유해요.

  • RETRY GRAPH RUN GROUP 'graph_run_group_id' — GRAPH_RUN_GROUP_ID로 식별되는 특정 이전 그래프 실행의 실패한 태스크에서부터 재실행해요. 가장 최근이 아닌 특정 그래프 실행을 재시도하고 싶을 때 이 변형을 사용해요. RETRY LAST는 항상 최신 실행을 대상으로 해요. 그래프 실행을 재실행하려면 다음 조건이 충족되어야 해요:
    • 지정된 그래프 실행 그룹의 최신 실행이 완료되어야 하며(진행 중인 실행이 없어야 함), FAILED 또는 CANCELED 상태의 태스크가 하나 이상 있어야 함.
    • 지정된 그래프 실행 그룹이 name으로 식별되는 태스크에 속해야 함.
    • 대상 실행 이후 태스크 그래프가 수정되지 않았어야 함.
    • 대상 그래프 실행 그룹의 첫 번째 시도가 지난 14일 이내에 실행되었어야 함.

    참고: RETRY LAST와 마찬가지로 이 명령은 대상 그래프 실행의 실패한 태스크에서 실행을 시작하는 새 그래프 실행을 만들어요. 특히 대상 그래프 실행의 모든 FAILED 또는 CANCELED 태스크 실행이 즉시 재실행되고, 모든 선행자가 성공적으로 실행되면 관련 하위 태스크가 예약돼요. 재시도로 생성된 새 태스크 그래프 실행은 대상 그래프 실행보다 1 큰 ATTEMPT_NUMBER를 가지며, 대상 그래프 실행과 동일한 GRAPH_RUN_GROUP_ID를 공유해요.

사용 메모 (Usage notes)

  • 태스크를 실행하려면 태스크에 대한 OWNERSHIP 또는 OPERATE 권한이 필요해요. EXECUTE TASK 명령이 태스크 실행을 트리거할 때 Snowflake는 태스크에 대한 OWNERSHIP 권한이 있는 역할이 태스크에 할당된 웨어하우스에 대한 USAGE 권한과 전역 EXECUTE TASK 권한도 있는지 확인하며, 없으면 오류가 발생해요. 태스크는 OPERATE 권한이 있는 다른 역할이 EXECUTE TASK로 태스크를 실행하더라도 항상 원래 소유자 역할의 권한으로 실행돼요.
  • 기본적으로 Snowflake는 태스크 소유자 역할의 권한으로 시스템 사용자를 사용하여 태스크를 실행해요. 특정 사용자로 태스크를 실행하려면 태스크를 EXECUTE AS USER로 구성해요.
  • USING CONFIG 옵션의 경우:
    • 태스크 그래프가 현재 실행 중일 때 이 명령을 실행하면 Snowflake는 현재 실행이 완료될 때까지 기다렸다가 동적 구성으로 새 실행을 시작해요.
    • 태스크가 실행 중일 때 이 명령을 여러 번 실행하면 Snowflake는 다음 실행에 가장 최근 명령의 구성을 사용해요. 이전 구성은 대체되어 실행되지 않아요.
    • 동적 구성은 이 명령이 트리거한 단일 실행에만 적용돼요. 이후의 예약된 실행은 태스크 정의의 기본 CONFIG 파라미터를 사용해요.
    • SQL 명령은 독립형 태스크 또는 태스크 그래프의 루트 태스크만 실행할 수 있어요. 하위 태스크가 입력되면 사용자 오류를 반환해요.
    • 독립형 또는 루트 태스크를 수동 실행하면 태스크의 버전이 설정돼요. 독립형 태스크 또는 전체 태스크 그래프는 이 버전으로 실행을 완료해요.
    • 일시 중지된 루트 태스크는 태스크를 다시 시작하지 않고 실행돼요. 이 SQL 명령을 실행하기 전에 루트 태스크를 명시적으로 다시 시작할 필요는 없어요. 그러나 EXECUTE TASK는 태스크 그래프의 하위 태스크를 자동으로 다시 시작하지 않아요. 일시 중지된 하위 태스크는 건너뛰어요. 태스크 그래프에서 루트 태스크에 연결된 모든 종속 태스크를 재귀적으로 다시 시작하려면 각 태스크를 개별적으로 활성화하는 대신 SYSTEM$TASK_DEPENDENTS_ENABLE 함수를 조회해요.
    • 새 태스크 그래프나 수정된 태스크 그래프를 테스트할 때 모범 사례는 루트 태스크를 의도한 프로덕션 일정으로 실행하도록 설정하되 일시 중지 상태로 두는 것이에요. 태스크 그래프를 성공적으로 테스트한 후 루트 태스크를 다시 시작해요. 테스트를 위해 태스크 그래프의 일시 중지된 하위 태스크를 다시 시작해야 한다는 점을 기억하세요. 그렇지 않으면 태스크 그래프 실행 중 건너뛰어져요.
  • 태스크 인스턴스가 실행 중이 아니면 새 실행이 즉시 시작돼요.
  • 다른 인스턴스가 예약되어 있으면(즉 태스크가 TASK_HISTORY 출력에서 SCHEDULED 상태를 보이면), 요청된 실행이 예약된 실행을 대체해요. 요청된 실행은 현재 타임스탬프를 예약 시간으로 사용하여 즉시 시작돼요.
  • 태스크 또는 태스크 그래프가 현재 대기 중이거나 실행 중이면(즉 태스크가 TASK_HISTORY 출력에서 EXECUTING 상태를 보이면), 현재 실행은 명령이 실행됐을 때 현재였던 태스크 버전을 사용하여 계속돼요. 그런 다음 태스크 유형에 따라 시점에 새 실행이 시작되도록 예약돼요:
    • 독립형 태스크의 경우, 현재 실행이 완료된 후 새 실행이 시작되도록 예약돼요.
    • 태스크 그래프의 경우, 동작은 OVERLAP_POLICY 설정에 따라 달라져요. 다음 예약된 실행이 시작되기 전에 EXECUTE TASK 명령이 다시 실행되면, 요청된 실행이 예약된 실행을 대체해요.
  • 태스크가 예기치 않은 오류로 실패하면 오류에 대한 알림을 받을 수 있어요.
  • 태스크 정보를 보려면 다음 중 하나를 사용할 수 있어요:
    • Snowsight에서 탐색 메뉴의 Transformation » Tasks를 선택.
    • COMPLETE_TASK_GRAPHS 테이블 함수를 호출하고 결과를 검사.

예시 (Examples)

태스크 실행 수동 트리거

mytask라는 태스크의 실행을 수동으로 트리거해요:

EXECUTE TASK mytask;

특정 그래프 실행 재시도

mytask의 특정 이전 그래프 실행의 실패한 태스크를 GRAPH_RUN_GROUP_ID로 식별하여 재시도해요:

EXECUTE TASK mytask RETRY GRAPH RUN GROUP '33af30ab-f960-4ba0-a5c8-d132e5623468';

동적 CONFIG 사용

기본 구성으로 my_root_task라는 루트 태스크를 만들어요:

CREATE OR REPLACE TASK my_root_task
  WAREHOUSE = regress
  SCHEDULE = '10 m'
  CONFIG = $${
    "environment": "production",
    "output_paths": {
      "logs": "/prod/logs",
      "results": "/prod/results"
    }
  }$$
  AS ...;

이제 태스크를 실행하고 동적 구성을 지정해요:

EXECUTE TASK my_root_task
  USING CONFIG=$${
    "output_paths": {
      "results": "/temp/testing"
    }
  }$$;

다음 예시는 이번 실행에 대한 결과 구성을 보여줘요:

{
  "environment": "production",
  "output_paths": {
    "logs": "/prod/logs",
    "results": "/temp/testing"
  }
}

environment 필드와 output_paths.logs 필드는 기본 구성과 동일하게 유지되고, output_paths.results만 동적 값으로 업데이트돼요.

더 알아보기 (Learn more)