작업 소개¶
작업을 사용해 데이터 파이프라인에서 비즈니스 프로시저를 자동화, 예약, 최적화할 수 있습니다.
Snowflake에서 작업은 SQL, JavaScript, Python, Java, Scala 또는 Snowflake Scripting과 같은 지원 언어 및 도구 를 사용하여 저장 프로시저에 대한 호출을 실행할 수 있습니다. 더 많은 Python 예제는 Python을 사용하여 Snowflake 작업 및 작업 그래프 관리하기 섹션을 참조하십시오.
작업 그래프 를 생성하여 작업 시퀀스를 결합할 수 있습니다. 작업 그래프는 논리를 사용하여 동적 동작을 수행하여 작업을 병렬 또는 시퀀스로 실행할 수 있습니다.
참고
테이블 스키마 진화 은 작업에서 지원되지 않습니다.
이 항목의 내용:
작업 생성 워크플로 개요¶
다음 단계에 따라 명령을 실행할 수 있는 작업 관리자 역할 을 만듭니다.
CREATE TASK 를 사용하여 새 작업을 정의합니다.
EXECUTE TASK 를 사용하여 작업을 수동으로 테스트합니다.
ALTER TASK … RESUME 을 사용하여 작업을 계속 실행하도록 허용합니다.
ALTER TASK 을 사용하여 필요에 따라 작업을 구체화합니다.
작업 실행에 대한 자세한 내용은 다음을 참조하십시오.
컴퓨팅 리소스 할당하기¶
작업에는 SQL , Python, Java, Scala 함수 및 저장 프로시저를 실행하기 위한 컴퓨팅 리소스가 필요합니다. 각 작업에 대해 서버리스 작업 을 생성하여 Snowflake가 리소스를 관리하도록 허용할지, 사용자 관리 가상 웨어하우스 모델 을 사용하여 직접 관리할지 선택할 수 있습니다.
서버리스 작업¶
이 모델을 사용하면 작업은 Snowflake가 관리하는 컴퓨팅에서 실행됩니다. Snowflake는 각 워크로드에 요구 사항에 따라 리소스 크기를 자동으로 조정합니다. Snowflake는 동일한 작업의 가장 최근 실행에 대한 통계의 동적 분석을 기반으로 주어진 실행에 이상적인 컴퓨팅 리소스 크기를 결정합니다.
이 모델은 다음과 같이 정기적으로 또는 반정기적으로 실행되는 작업에 권장됩니다.
항상 같은 시간에 시작되는 작업.
새로운 데이터가 도착할 때만 실행되는 작업. (자세한 내용은 트리거된 작업 섹션을 참조하십시오.)
제한 사항¶
서버리스 컴퓨팅 모델을 사용하여 작업 만들기¶
CREATE TASK 또는 ALTER TASK 를 사용하는 경우 WAREHOUSE 매개 변수를 생략하십시오.
작업을 실행하는 역할에는 글로벌 EXECUTEMANAGEDTASK 권한이 있어야 합니다. 작업의 액세스 제어 요구 사항에 대한 자세한 내용은 작업 보안 섹션을 참조하십시오.
다음 매개 변수를 설정하여 서버리스 작업의 비용과 성능을 어느 정도 제어할 수 있습니다.
SERVERLESS_TASK_MAX_STATEMENT_SIZE: 예상치 못한 비용을 방지하기 위한 웨어하우스의 최대 크기입니다.
SERVERLESS_TASK_MIN_STATEMENT_SIZE: 예측 가능한 성능을 위한 웨어하우스의 최소 크기입니다.
TARGET_COMPLETION_INTERVAL 작업의 성능을 발휘해야 하는 시간 윈도우입니다.
Snowflake가 서버리스 컴퓨팅 리소스를 추정하는 방법¶
Snowflake는 대상 시간 프레임과 이전 작업 실행의 성능을 기반으로 작업을 완료하는 데 필요한 컴퓨팅 리소스를 자동으로 추정합니다.
TARGET_COMPLETION_INTERVAL 을 사용하여 대상 시간 프레임을 설정할 수 있습니다. 이 값을 설정하지 않으면 Snowflake는 다음 예약된 실행 시간 전에 완료되도록 서버리스 컴퓨팅 리소스의 크기를 조정합니다.
작업이 완료된 후 Snowflake는 다음과 같이 필요한 컴퓨팅 리소스를 추정합니다.
작업이 너무 빨리 완료되는 경우(목표 시간 프레임보다 짧은 시간 프레임 내에서), Snowflake는 후속 실행에서 리소스를 웨어하우스 크기 를 1개씩 SERVERLESS_TASK_MIN_STATEMENT_SIZE 까지 축소합니다.
작업이 너무 느리게 완료되는 경우(대상 시간 프레임보다 많은 시간 프레임 내), Snowflake는 후속 실행에서 리소스를 하나씩 웨어하우스 크기 를 축소합니다. SERVERLESS_TASK_MAX_STATEMENT_SIZE 에 도달하면 작업이 완료되거나 시간 제한에 도달할 때까지 작업이 계속(대상 시간을 초과할 수 있음) 진행됩니다.
예¶
예 1: 매시간 실행할 서버리스 작업을 생성합니다. Snowflake는 예약된 시간 내에 작업을 완료할 것으로 예상되는 서버리스 컴퓨팅 리소스를 할당합니다.
CREATE TASK SCHEDULED_T1
SCHEDULE='60 MINUTES'
AS SELECT 1;
from datetime import timedelta
from snowflake.core.task import Cron, Task
tasks = root.databases["TEST_DB"].schemas["TEST_SCHEMA"].tasks
task = tasks.create(
Task(
name="SCHEDULED_T1",
definition="SELECT 1",
schedule=timedelta(minutes=60),),
),
)
예 2: 매일 자정에 시작하여 2시간 동안 실행되는 서버리스 작업을 생성합니다. 예약(CRON 사용)은 타임존을 포함하여 작업이 시작되는 시점을 정의합니다. 대상 완료 간격은 작업이 완료되어야 하는 시기를 정의합니다. Snowflake는 예약된 시간 내에 작업이 완료될 수 있도록 서버리스 컴퓨팅을 예측하고 할당합니다.
CREATE TASK SCHEDULED_T2
SCHEDULE='USING CRON 0 * * * * America/Los_Angeles'
TARGET_COMPLETION_INTERVAL='120 MINUTE'
SERVERLESS_TASK_MAX_STATEMENT_SIZE='LARGE'
AS SELECT 1;
from datetime import timedelta
from snowflake.core.task import Cron, Task
tasks = root.databases["TEST_DB"].schemas["TEST_SCHEMA"].tasks
task = tasks.create(
Task(
name="SCHEDULED_T2",
definition="SELECT 1",
schedule=Cron("0 * * * *", "America/Los_Angeles"),
target_completion_interval=timedelta(minutes=120),
serverless_task_max_statement_size="LARGE",
),
)
예 3: 대상 완료 간격과 최소 및 최대 웨어하우스 크기 범위 내에서 하루에 한 번 예약된 서버리스 작업을 생성합니다.
CREATE TASK SCHEDULED_T3
SCHEDULE='USING CRON 0 0 * * * UTC'
TARGET_COMPLETION_INTERVAL='180 M'
SERVERLESS_TASK_MIN_STATEMENT_SIZE='MEDIUM'
SERVERLESS_TASK_MAX_STATEMENT_SIZE='LARGE'
AS SELECT 1;
from datetime import timedelta
from snowflake.core.task import Cron, Task
tasks = root.databases["TEST_DB"].schemas["TEST_SCHEMA"].tasks
task = tasks.create(
Task(
name="SCHEDULED_T3",
definition="SELECT 1",
schedule=Cron("0 0 * * *", "UTC"),
target_completion_interval=timedelta(minutes=180),
serverless_task_min_statement_size="MEDIUM",
serverless_task_max_statement_size="LARGE",
),
)
이 구성을 사용하면 서버리스 작업은 하루에 한 번 자정에 최소 3시간(TARGET_COMPLETION_INTERVAL)의 Medium 웨어하우스에서 실행됩니다. Snowflake는 SERVERLESS_TASK_MAX_STATEMENT_SIZE 에 도달할 때까지 지정된 TARGET_COMPLETION_INTERVAL 내에서 작업 실행이 완료되도록 서버리스 컴퓨팅의 크기를 자동으로 조정합니다.
예 4: 대상 완료 간격 없이 10초마다 실행되도록 예약된 서버리스 작업을 생성합니다.
CREATE TASK SCHEDULED_T4
SCHEDULE='10 SECONDS'
SERVERLESS_TASK_MAX_STATEMENT_SIZE='LARGE'
AS SELECT 1;
from datetime import timedelta
from snowflake.core.task import Cron, Task
tasks = root.databases["TEST_DB"].schemas["TEST_SCHEMA"].tasks
task = tasks.create(
Task(
name="SCHEDULED_T4",
definition="SELECT 1",
schedule=timedelta(seconds=10),
serverless_task_max_statement_size="LARGE",
),
)
이 구성을 사용하면 서버리스 작업이 10초마다 실행됩니다. 일련의 작업 실행 시간이 다음 예약된 시간까지 완료되지 않으면, Snowflake는 SERVERLESS_TASK_MAX_STATEMENT_SIZE 에 도달할 때까지 지정된 SCHEDULE 내에서 작업 실행이 완료되도록 서버리스 컴퓨팅의 크기를 자동으로 조정합니다.
매개 변수 및 구문에 대한 자세한 내용은 CREATE TASK 및 ALTER TASK 섹션을 참조하십시오.
사용자 관리형 가상 웨어하우스 모델¶
이 모델을 사용하면 각 워크로드에 사용되는 컴퓨팅 리소스를 완벽하게 제어할 수 있습니다.
이 모델은 예측할 수 없는 컴퓨팅 리소스 로딩을 수동으로 관리하려는 경우에 권장됩니다. 자동 일시 중단 및 자동 재개 가 활성화된 멀티클러스터 웨어하우스 도 크레딧 사용을 조절하는 데 도움이 될 수 있습니다.
웨어하우스 크기 선택하기¶
기존 웨어하우스를 사용하여 개별 작업에 컴퓨팅 리소스를 제공하기로 선택한 경우 웨어하우스 고려 사항 에 설명된 모범 사례를 따르십시오. 작업의 컴퓨팅 요구 사항을 파악하려면 웨어하우스 크기와 클러스터링을 기반으로 다양한 웨어하우스를 사용하여 단일 작업의 평균 실행 시간 또는 작업 그래프 를 분석합니다. 또한 웨어하우스가 여러 프로세스에 의해 공유되는지 여부도 고려해야 합니다. 자세한 내용은 작업 기간 섹션을 참조하십시오.
컴퓨팅 모델 선택 권장 사항¶
다음 표에서는 서버리스 작업과 사용자 관리 작업을 사용할 시점을 결정하는 데 도움이 될 수 있는 다양한 요소를 설명합니다.
카테고리 |
서버리스 작업 |
사용자 관리 작업 |
참고 |
---|---|---|---|
동시 작업 워크로드의 수, 지속 기간, 예측 가능성 |
동시에 실행되는 작업이 너무 적거나 완료 속도가 너무 빨라 활용도가 낮은 웨어하우스에 권장됩니다. 비교적 안정적으로 실행되는 작업은 서버리스 작업에 적합한 후보입니다. |
여러 동시 작업이 진행되고 활용도가 높은 웨어하우스에 권장됩니다. 컴퓨팅 리소스에 대한 부하가 예측할 수 없을 때도 권장됩니다. 자동 일시 중단 및 자동 재개 가 활성화된 멀티 클러스터 웨어하우스 는 크레딧 소비를 조정하는 데 도움이 될 수 있습니다. |
서버리스 작업의 경우 Snowflake는 실제 컴퓨팅 리소스 사용량을 기준으로 계정에 대한 요금을 청구합니다. 사용자 관리 작업의 경우 웨어하우스에 대한 청구는 웨어하우스 규모를 기준으로 하며, 웨어하우스가 재개될 때마다 최소 60초 단위로 청구됩니다. |
예약 간격 |
예약 간격 준수가 매우 중요할 때 권장됩니다. 독립 실행형 작업이나 예약된 작업 그래프의 실행이 간격을 초과하면 Snowflake가 컴퓨팅 리소스의 크기를 늘립니다. |
예약 간격 준수가 덜 중요할 때 권장됩니다. |
예약 간격 은 작업 그래프에서 독립 실행형 작업 또는 루트 작업의 예약 실행 간 시간 간격을 나타냅니다. 컴퓨팅 리소스를 늘리면 전부는 아니지만 일부 SQL 코드의 실행 시간이 단축될 수 있지만 배치 윈도우 내에서 작업 실행이 완료되지는 않습니다. |
서버리스 작업 실행의 최대 크기는 XXLARGE 웨어하우스에 해당하는 크기입니다. 작업 워크로드에 더 큰 웨어하우스가 필요한 경우, 필요한 크기의 웨어하우스로 사용자 관리 작업을 만듭니다.
예약 또는 트리거 정의하기¶
작업은 예약된 일정에 따라 실행되도록 설정하거나 스트림에 새로운 데이터가 있을 때와 같이 이벤트에 의해 트리거될 수 있습니다.
참고: 예약 또는 트리거가 정의되어 있어도 작업은 일시 중단된 상태에서 시작됩니다. 나중에 EXECUTE TASK 를 사용하여 작업의 단일 실행을 시작하거나 ALTER TASK … RESUME. 을 사용하여 연속적으로 실행되도록 허용할 수 있습니다.
예약된 일정에 따라 작업 실행하기¶
예약된 일정에 따라 작업을 실행하려면 CREATE TASK 또는 ALTER TASK 을 사용하여 작업을 생성하거나 변경할 때 또는 Snowsight 에서 SCHEDULE 매개 변수를 사용해 작업을 편집하여 일정을 정의합니다.
Snowflake는 일정에 따라 한 번에 하나의 작업 인스턴스만 실행되도록 보장합니다. 다음으로 예약된 실행 시간이 발생할 때 작업이 계속 실행 중이면 예약된 시간을 건너뜁니다.
다음 예제에서는 10초마다 실행되는 작업을 생성합니다.
CREATE TASK task_runs_every_10_seconds
SCHEDULE='10 SECONDS'
AS SELECT 1;
특정 시간이나 요일을 기준으로 예약을 정의하려면 SCHEDULE =’USING CRON…’ 매개 변수를 사용하십시오.
다음 예제에서는 미주/로스앤젤레스 타임존을 사용하여 매주 일요일 오전 3시에 실행되는 작업을 생성합니다.
CREATE TASK task_sunday_3_am_pacific_time_zone
SCHEDULE='USING CRON 0 3 * * SUN America/Los_Angeles'
AS SELECT 1;
자세한 내용은 CREATE TASK … SCHEDULE 섹션을 참조하십시오.
스트림에 새로운 데이터가 있을 때마다 작업 실행¶
추출, 로드, 변환(ELT) 워크플로에서와 같이 정의된 스트림 에 새로운 데이터가 있을 때마다 작업을 실행하려면 트리거된 작업 를 사용하십시오. 이렇게 하면 새로운 데이터의 가용성을 예측할 수 없을 때 소스를 자주 폴링할 필요가 없습니다. 또한 데이터가 즉시 처리되므로 지연 시간도 줄어듭니다. 예:
CREATE TASK triggered_task_stream
WHEN SYSTEM$STREAM_HAS_DATA('orders_stream')
AS
INSERT INTO completed_promotions
SELECT order_id, order_total, order_time, promotion_id
FROM orders_stream;
자세한 내용은 트리거된 작업 섹션을 참조하십시오.
예약에 따라 실행하되 스트림에 새로운 데이터가 있는 경우에만 실행합니다¶
예약된 작업을 트리거된 작업과 결합할 수 있습니다. 예를 들어, 스트림에 새로운 데이터가 있는 경우에만 매 시간마다 실행되도록 작업을 설정할 수 있습니다. 예:
CREATE TASK triggered_task_stream
SCHEDULE = '1 HOUR'
WHEN SYSTEM$STREAM_HAS_DATA('orders_stream')
AS SELECT 1;
작업 실패 시 발생하는 상황 정의하기¶
실행 실패 후 작업 자동 일시 중단하기¶
선택적으로, 지정된 횟수의 연속 실행이 실패하거나 시간 초과되면 작업을 자동으로 일시 중단합니다. 이 기능을 사용하면 Snowflake 크레딧을 소비하지만 완료에 실행 완료에 실패하는 작업을 일시 중단함으로써 비용을 절감할 수 있습니다.
작업에 SUSPEND_TASK_AFTER_NUM_FAILURES = num
매개 변수를 설정합니다. 매개 변수를 0
보다 큰 값으로 설정하면 지정된 횟수의 연속 작업 실행이 실패하거나 시간 초과되면 작업이 자동으로 일시 중단됩니다.
매개 변수는 CREATE TASK 를 사용하여 작업을 생성할 때 설정하거나 나중에 ALTER TASK 를 사용하여 설정할 수 있습니다. 이 값은 Snowsight 에서 변경할 수도 있습니다.
SUSPEND_TASK_AFTER_NUM_FAILURES 매개 변수는 계정, 데이터베이스 또는 스키마 수준에서도 설정할 수 있습니다. 이 설정은 수정된 오브젝트에 포함된 모든 작업에 적용됩니다. 매개 변수를 더 낮은 수준에서 명시적으로 설정하면 더 높은 수준에서 설정된 매개 변수 값이 재정의됩니다.
실패한 작업 실행 자동 재시도¶
작업 그래프가 FAILED 상태에서 완료되면 Snowflake는 작업을 자동으로 다시 시도할 수 있습니다. 자동 작업 재시도는 기본적으로 비활성화됩니다. 이 기능을 사용하려면 TASK_AUTO_RETRY_ATTEMPTS 를 0보다 큰 값으로 설정합니다.
오류 알림을 사용하는 작업은 실패한 재시도 시도에 대해 알림을 보냅니다. 자세한 내용은 오류 알림을 보내도록 작업 구성하기 섹션을 참조하십시오.
계정, 데이터베이스 또는 스키마 수준에서 TASK_AUTO_RETRY_ATTEMPTS 매개 변수 값을 설정하면 다음 예약된 실행 중에 수정된 오브젝트에 포함된 작업에 변경 사항이 적용됩니다.
추가 세션 매개 변수 정의하기¶
작업은 모든 세션 매개 변수를 지원합니다. 전체 목록은 매개 변수 를 참조하십시오. 작업은 계정 또는 사용자 매개 변수를 지원하지 않습니다.
작업에 대한 세션 매개 변수를 설정하려면 CREATE TASK 을 사용하여 작업 정의에 매개 변수를 추가하거나 ALTER TASK … SET 을 사용하여 작업을 수정했습니다. 예제:
CREATE TASK my_task
SCHEDULE = 'USING CRON 0 * * * * UTC'
TIMESTAMP_INPUT_FORMAT = 'YYYY-MM-DD HH24'
USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = 'XSMALL'
AS
INSERT INTO mytable(ts) VALUES(CURRENT_TIMESTAMP);
ALTER TASK my_task
SET USER_TASK_TIMEOUT_MS = 10000 -- Changes maximum runtime to 10 seconds
작업 실행하기¶
이 섹션에서는 작업을 예약하고 실행할 수 있는 다양한 방법과 작업의 버전이 결정되는 방법에 대해 설명합니다.
수동으로 작업 실행하기¶
CREATE TASK 또는 ALTER TASK 을 사용하여 새 작업과 해당 매개 변수를 설정한 후 EXECUTE TASK 을 사용하여 작업의 단일 실행을 시작할 수 있습니다. 이 명령은 새 작업이나 수정된 작업을 테스트할 때 유용합니다.
참고
스크립트나 저장 프로시저에서 이 SQL 명령을 직접 호출할 수 있습니다.
이 명령은 외부 데이터 파이프라인에서 작업 통합을 지원합니다.
Snowflake 계정을 인증하고 SQL 작업을 승인할 수 있는 모든 서드 파티 서비스는 EXECUTE TASK 명령으로 작업을 실행할 수 있습니다.
작업 실행의 버전 관리¶
독립 실행형 작업을 처음 재개하거나 수동으로 실행하면 작업의 초기 버전이 설정됩니다. 독립 실행형 작업은 이 버전을 사용하여 실행됩니다. 작업이 일시 중단 및 수정된 후 독립 실행형 작업이 다시 시작되거나 수동으로 실행될 때 새 버전이 설정됩니다.
작업이 일시 중단되면 향후 예정된 모든 작업 실행이 취소되지만, 현재 실행 중인 작업은 현재 버전을 사용하여 계속 실행됩니다.
예를 들어, 작업이 일시 중단되었지만 이 작업의 예약된 실행이 이미 시작되었다고 가정하겠습니다. 작업의 소유자는 작업이 실행 중인 동안 작업에서 호출하는 SQL 코드를 수정합니다. 작업은 작업 실행을 시작할 때 최신 버전의 작업을 사용하여 정의에 있는 SQL 코드를 실행하고 실행합니다. 작업이 다시 시작되거나 수동으로 실행된 후의 새 작업 버전이 설정됩니다. 이 새 버전에는 작업에 대한 수정 사항이 포함됩니다.
작업 버전 기록을 검색하려면 SNOWFLAKE 공유 데이터베이스에서 TASK_VERSIONS Account Usage 뷰 를 쿼리하십시오.
계정의 작업 로드 내역 보기¶
SQL 또는 Snowsight 를 사용하여 계정의 작업 기록을 볼 수 있습니다. Snowsight 에서 작업 기록을 보려면 Snowsight 의 작업 및 작업 그래프 보기 섹션을 참조하십시오. 필요한 권한에 대한 정보는 작업 기록 뷰 섹션을 참조하십시오.
단일 작업의 실행 기록을 보는 방법은 다음과 같습니다.
- SQL:
Snowflake Information Schema 의 TASK_HISTORY 테이블 함수를 쿼리합니다.
현재 예약되었거나 실행 중인 작업 그래프 실행에 대한 세부 정보를 보는 방법은 다음과 같습니다.
- SQL:
Snowflake Information Schema 의 CURRENT_TASK_GRAPHS 테이블 함수를 쿼리합니다.
지난 60분 동안 성공, 실패 또는 취소된 작업 그래프 실행의 세부 정보를 보는 방법은 다음과 같습니다.
- SQL:
Snowflake Information Schema 의 COMPLETE_TASK_GRAPHS 테이블 함수를 쿼리합니다.
(Account Usage 에서) COMPLETE_TASK_GRAPHS 뷰 뷰를 쿼리합니다.
작업 비용¶
SQL 코드 실행을 위한 작업 수행과 관련된 비용은 작업을 위한 컴퓨팅 리소스의 출처에 따라 다릅니다.
- 사용자 관리 웨어하우스
Snowflake는 클라이언트 또는 Snowflake 웹 인터페이스에서 같은 SQL 문을 실행하기 위한 웨어하우스 사용량과 유사하게, 작업이 실행되는 동안의 웨어하우스 사용량을 기준으로 크레딧 사용 에 대해 계정에 요금을 청구합니다. 초당 크레딧 청구 및 웨어하우스 자동 일시 중단을 사용하여 더 큰 웨어하우스 크기로 시작한 후 작업 워크로드에 따라 크기를 조정할 수 있는 유연성이 제공됩니다.
- 서버리스 컴퓨팅 모델
Snowflake는 컴퓨팅 리소스 사용량에 따라 계정에 요금을 청구합니다. 요금은 컴퓨팅 시간 크레딧 사용으로 측정되는 클라우드 서비스 사용량을 포함한 총 리소스 사용량을 기준으로 계산됩니다. 컴퓨팅 시간 비용은 웨어하우스 크기와 쿼리 런타임에 따라 달라집니다. 자세한 내용은 서버리스 크레딧 사용 또는 쿼리: 총 서버리스 작업 비용 섹션을 참조하십시오.
Snowflake는 작업 기록에서 작업 실행을 분석하여 서버리스 컴퓨팅 리소스의 올바른 크기와 수를 동적으로 결정합니다. Snowflake가 작업 실행을 관리하기 위해 리소스를 자동으로 확장하거나 축소하므로 작업 실행을 실행하는 데 드는 비용도 비례하여 증가합니다.
작업에서 사용하는 크레딧 수를 알아보려면 Snowflake 서비스 사용 테이블 에서 “서버리스 기능 크레딧 테이블”을 참조하십시오.
작업을 생성할 때 비용을 최적화하려면 다음 모범 사례를 고려하십시오.
SCHEDULE을 실행 빈도를 줄이도록 설정합니다.
자동 일시 중단 및 자동 재시도 매개 변수를 사용하여 작업 실패로 인한 리소스 낭비를 방지합니다.
데이터 스트림에 새로운 데이터가 있을 때와 같이 특정 조건에서만 실행해야 하는 작업의 경우 트리거된 작업 를 설정하십시오.
서버리스 기능에 대한 예산을 생성하고 지출 한도에 대한 경고를 생성합니다. 자세한 내용은 예산을 사용하여 크레딧 사용 모니터링하기 섹션을 참조하십시오.
특정 작업에 대한 현재 크레딧 사용을 검색하려면 SERVERLESS_TASK_HISTORY 테이블 함수를 쿼리하십시오. 작업 소유자로 다음 문을 실행합니다. 여기서,
<database_name>
은 작업이 포함된 데이터베이스이고<task_name>
은 작업의 이름입니다.SET num_credits = (SELECT SUM(credits_used) FROM TABLE(<database_name>.information_schema.serverless_task_history( date_range_start=>dateadd(D, -1, current_timestamp()), date_range_end=>dateadd(D, 1, current_timestamp()), task_name => '<task_name>') ) );
모든 서버리스 작업에 대한 현재 크레딧 사용을 검색하려면 SERVERLESS_TASK_HISTORY 뷰를 쿼리하십시오. 계정 관리자로서 다음 문을 실행합니다.
SELECT start_time, end_time, task_id, task_name, credits_used, schema_id, schema_name, database_id, database_name FROM snowflake.account_usage.serverless_task_history ORDER BY start_time, task_id;
비용 모니터링하기¶
서버리스 작업은 사용 시 컴퓨팅 비용 이 발생합니다. ACCOUNT_USAGE 및 ORGANIZATION_USAGE 스키마에서 비용 관련 뷰를 사용하여 서버리스 작업과 관련된 비용을 추적할 수 있습니다. 이러한 뷰를 쿼리할 때 service_type
열을 필터링하여 SERVERLESS_TASK
또는 SERVERLESS_TASK_FLEX
값을 찾습니다.
뷰 |
스키마 |
|
요구 사항이 있는 권한이 있는 역할 |
---|---|---|---|
ACCOUNT_USAGE |
SERVERLESS_TASK |
ACCOUNTADMIN 역할 USAGE_VIEWER 데이터베이스 역할 |
|
ACCOUNT_USAGE |
SERVERLESS_TASK |
ACCOUNTADMIN 역할 USAGE_VIEWER 데이터베이스 역할 |
|
ORGANIZATION_USAGE |
SERVERLESS_TASK |
ACCOUNTADMIN 역할 USAGE_VIEWER 데이터베이스 역할 |
|
ORGANIZATION_USAGE |
SERVERLESS_TASK |
ORGADMIN 역할 GLOBALORGADMIN 역할 ORGANIZATION_USAGE_VIEWER 데이터베이스 역할 |
예시: 조직 전체에서 서버리스 작업으로 인해 발생한 총 계정 비용을 봅니다.
예시: 2024년 12월 1일부터 2024년 12월 31일 사이에 서버리스 작업으로 인해 발생한 총 계정 비용을 봅니다.
SELECT
name,
SUM(credits_used_compute) AS total_credits
FROM
SNOWFLAKE.ACCOUNT_USAGE.METERING_HISTORY
WHERE
service_type ILIKE '%SERVERLESS_TASK%'
AND start_time >= '2024-12-01'
AND end_time <= '2024-12-31'
GROUP BY
name
ORDER BY
name ASC;
예시: 조직 전체에서 서버리스 작업으로 인해 발생한 총 계정 비용을 봅니다.
SELECT
usage_date AS date,
account_name,
SUM(usage) AS credits,
currency,
SUM(usage_in_currency) AS usage_in_currency
FROM
SNOWFLAKE.ORGANIZATION_USAGE.USAGE_IN_CURRENCY_DAILY
WHERE
USAGE_TYPE ILIKE '%SERVERLESS_TASK%'
GROUP BY
usage_date, account_name, currency
ORDER BY
USAGE_DATE DESC;
Trust Center 작업을 위해 컴퓨팅 시간당 청구되는 크레딧 수에 대한 자세한 내용은 Snowflake Service Consumption Table 의 표 5를 참조하십시오.
작업 기간¶
작업 기간에는 작업 시작이 예약된 시점부터 실행이 완료될 때까지의 시간이 포함됩니다. 이 기간에는 다음 두 가지가 모두 포함됩니다.
큐 대기 시간: 작업이 실행을 시작하기 전에 컴퓨팅 리소스가 사용 가능해질 때까지 기다리는 시간입니다. 큐잉 시간을 계산하려면 TASK_HISTORY 뷰 를 쿼리하고 SCHEDULED_TIME 및 QUERY_START_TIME 을 비교합니다.
실행 시간: 작업에서 SQL 문 또는 기타 작업을 실행하는 데 걸리는 시간입니다. 실행 시간을 계산하려면 TASK_HISTORY 뷰 를 쿼리하고 QUERY_START_TIME 및 COMPLETED_TIME 을 비교합니다.
예를 들어, 다음 다이어그램은 15초마다 실행되도록 예약된 서버리스 작업을 보여줍니다. 이 작업 실행의 총 시간은 대기 시간 5초와 실행 시간 7초를 포함하여 12초입니다.
시간 제한¶
작업 실행이 예약된 시간 또는 대상 완료 간격을 초과하는 경우 기본적으로 작업이 완료되거나 시간 초과 또는 실패할 때까지 계속 실행됩니다.
STATEMENT_TIMEOUT_IN_SECONDS 및 label-user_task_timeout_ms
가 모두 설정된 경우 시간 제한은 두 매개 변수 중 0이 아닌 가장 낮은 값 이 됩니다.
STATEMENT_QUEUED_TIMEOUT_IN_SECONDS 및 USER_TASK_TIMEOUT_MS 가 모두 설정된 경우 USER_TASK_TIMEOUT_MS 값이 우선합니다.
작업 그래프를 사용한 시간 제한에 대한 자세한 내용은 작업 그래프 시간 제한 섹션을 참조하십시오.
고려 사항¶
서버리스 작업의 경우, Snowflake는 큐 대기 시간을 포함하여 대상 완료 간격 내에 작업이 완료되도록 리소스를 자동으로 확장합니다.
사용자 관리 작업의 경우 공유 또는 사용량이 많은 웨어하우스에서 작업이 예약된 경우 큐 대기 기간이 길어지는 것이 일반적입니다.
작업 보안¶
작업을 시작하려면 올바른 액세스 권한이 있어야 합니다. 이 섹션에서는 작업에 대한 액세스를 관리하는 방법을 설명합니다.
작업 그래프 소유권에 대한 정보는 작업 그래프 소유권 관리 섹션을 참조하십시오.
액세스 제어 권한¶
작업 만들기¶
작업을 만들려면 최소한으로 다음의 권한이 있는 역할이 필요합니다.
오브젝트 |
권한 |
참고 |
---|---|---|
계정 |
EXECUTE MANAGED TASK |
서버리스 컴퓨팅 리소스에 의존하는 작업에만 필요합니다. |
데이터베이스 |
USAGE |
|
스키마 |
USAGE, CREATE TASK |
|
웨어하우스 |
USAGE |
사용자 관리 웨어하우스를 사용하는 작업에만 필수입니다. |
작업 실행하기¶
작업이 생성된 후 작업을 실행하려면 작업 소유자에게 다음 권한이 있어야 합니다.
오브젝트 |
권한 |
참고 |
---|---|---|
계정 |
EXECUTE TASK |
역할이 소유한 모든 작업을 실행하기 위해 필요합니다. 역할에 대한 EXECUTE TASK 권한을 취소하면 모든 후속 작업이 해당 역할에서 시작되지 않습니다. |
계정 |
EXECUTE MANAGED TASK |
서버리스 컴퓨팅 리소스에 의존하는 작업에만 필요합니다. |
데이터베이스 |
USAGE |
|
스키마 |
USAGE |
|
작업 |
USAGE |
|
웨어하우스 |
USAGE |
사용자 관리 웨어하우스를 사용하는 작업에만 필수입니다. |
또한 역할은 작업에서 실행되는 SQL 문을 실행하기 위해 필요한 권한이 있어야 합니다.
작업 기록 뷰¶
작업을 보려면 다음 권한 중 하나 이상이 있어야 합니다.
ACCOUNTADMIN 역할
작업에 대한 OWNERSHIP 권한
전역 MONITOR EXECUTION 권한
작업 다시 시작 또는 일시 중단하기¶
작업 소유자 외에도 작업에 대한 OPERATE 권한이 있는 역할은 작업을 일시 중단하거나 재개할 수 있습니다. 이 역할은 작업을 포함하는 데이터베이스 및 스키마에 대한 USAGE 권한이 있어야 합니다. 다른 권한은 필요하지 않습니다.
작업이 재개되면 Snowflake는 작업 소유자 역할이 작업 실행하기 에 나열된 권한이 있는지 확인합니다.
작업 권한을 관리하기 위한 사용자 지정 역할 만들기¶
사용자 지정 역할을 사용하면 Snowflake에서 각 계정이나 역할에 부여된 권한을 쉽게 관리할 수 있습니다. 사용자 지정 역할을 사용하여 모든 계정 또는 역할에 대한 권한을 변경하려면 사용자 지정 역할을 업데이트합니다. 또는 사용자 지정 역할을 제거하여 권한을 취소합니다.
작업을 생성하기 위한 사용자 지정 역할 만들기¶
Snowflake에서는 서버리스 작업과 사용자 관리 작업을 만들려면 서로 다른 권한이 필요합니다.
예를 들어, 사용자 지정 작업을 생성하려면 warehouse_task_creation
사용자 지정 역할을 만들고 해당 역할에 해당 역할이 작업을 생성할 수 있는 웨어하우스에 대한 CREATE TASK 및 USAGE 권한을 부여합니다.
USE SYSADMIN;
CREATE ROLE warehouse_task_creation
COMMENT = 'This role can create user-managed tasks.';
from snowflake.core.role import Role
root.session.use_role("SYSADMIN")
my_role = Role(
name="warehouse_task_creation",
comment="This role can create user-managed tasks."
)
root.roles.create(my_role)
USE ACCOUNTADMIN;
GRANT CREATE TASK
ON SCHEMA schema1
TO ROLE warehouse_task_creation;
from snowflake.core.role import Securable
root.session.use_role("ACCOUNTADMIN")
root.roles['warehouse_task_creation'].grant_privileges(
privileges=["CREATE TASK"], securable_type="schema", securable=Securable(name='schema1')
)
GRANT USAGE
ON WAREHOUSE warehouse1
TO ROLE warehouse_task_creation;
from snowflake.core.role import Securable
root.roles['warehouse_task_creation'].grant_privileges(
privileges=["USAGE"], securable_type="warehouse", securable=Securable(name='warehouse1')
)
서버리스 작업을 만들 수 있는 역할의 예제로, 이름이 serverless_task_creation
인 사용자 지정 역할을 만들고 이 역할에 CREATE TASK 권한과 계정 수준 EXECUTE MANAGED TASK 권한을 부여합니다.
USE SYSADMIN;
CREATE ROLE serverless_task_creation
COMMENT = 'This role can create serverless tasks.';
from snowflake.core.role import Role
root.session.use_role("SYSADMIN")
my_role = Role(
name="serverless_task_creation",
comment="This role can create serverless tasks."
)
root.roles.create(my_role)
USE ACCOUNTADMIN;
GRANT CREATE TASK
ON SCHEMA schema1
TO ROLE serverless_task_creation;
from snowflake.core.role import Securable
root.session.use_role("ACCOUNTADMIN")
root.roles['serverless_task_creation'].grant_privileges(
privileges=["CREATE TASK"], securable_type="schema", securable=Securable(name='schema1')
)
GRANT EXECUTE MANAGED TASK ON ACCOUNT
TO ROLE serverless_task_creation;
root.roles['serverless_task_creation'].grant_privileges(
privileges=["EXECUTE MANAGED TASK"], securable_type="account"
)
작업을 관리하기 위한 사용자 지정 역할 만들기¶
사용자 지정 역할을 생성하고 EXECUTE TASK 권한을 부여한 다음 이 사용자 지정 역할을 모든 작업 소유자 역할에 부여하여 자신의 작업을 변경할 수 있도록 하십시오. 작업 소유자 역할이 작업을 실행할 수 있는 기능을 제거하려면 작업 소유자 역할에서 이 사용자 지정 역할을 취소합니다.
예를 들어, 사용자 지정 역할 이름 taskadmin
을 만들고 해당 역할에 EXECUTE TASK 권한을 부여합니다. taskadmin
역할을 myrole
이라는 작업 소유자 역할에 할당합니다.
USE ROLE securityadmin;
CREATE ROLE taskadmin;
from snowflake.core.role import Role
root.session.use_role("securityadmin")
root.roles.create(Role(name="taskadmin"))
새 역할에 계정 수준 권한을 부여하기 전에 활성 역할을 ACCOUNTADMIN으로 설정
USE ROLE accountadmin;
GRANT EXECUTE TASK, EXECUTE MANAGED TASK ON ACCOUNT TO ROLE taskadmin;
root.session.use_role("accountadmin")
root.roles['taskadmin'].grant_privileges(
privileges=["EXECUTE TASK", "EXECUTE MANAGED TASK"], securable_type="account"
)
활성 역할을 SECURITYADMIN으로 설정하여 이 역할이 다른 역할에 역할을 부여할 수 있음을 표시
USE ROLE securityadmin;
GRANT ROLE taskadmin TO ROLE myrole;
from snowflake.core.role import Securable
root.session.use_role("securityadmin")
root.roles['myrole'].grant_role(role_type="ROLE", role=Securable(name='taskadmin'))
사용자 지정 역할 및 역할 계층 구조 생성과 관련한 자세한 내용은 액세스 제어 구성하기 를 참조하십시오.
작업 소유자 역할 삭제¶
작업의 소유자 역할을 삭제하면 해당 작업의 소유권은 소유자 역할을 삭제한 역할로 이전됩니다. 작업의 소유권이 이전되면 해당 작업은 자동으로 일시 중지되고 새 소유자가 작업을 재개할 때까지 새로운 실행은 예약되지 않습니다.
작업이 실행되는 중에 역할을 삭제하면 작업 실행은 삭제된 역할에서 처리를 완료합니다.
시스템 서비스 작업 실행¶
Snowflake는 작업 소유자의 권한으로 작업을 실행하지만 작업 실행은 사용자와 연결되지 않습니다. 대신 각 실행은 시스템 서비스에 의해 실행됩니다. 작업은 특정 사용자와 분리되어 사용자가 삭제되거나 인증 문제로 인해 잠기거나 역할이 제거될 때 발생할 수 있는 복잡성을 방지합니다.
작업 실행은 사용자와 분리되기 때문에 작업 실행에 대한 쿼리 기록은 시스템 서비스와 연결됩니다. 따라서 이 서비스에는 사용자 자격 증명이 없으며, 어떤 개인도 이 서비스의 ID를 추정할 수 없습니다. 시스템 서비스에 대한 활동은 사용자의 계정으로 제한됩니다. 다른 작업에 적용되는 것과 동일한 암호화 보호 및 기타 보안 프로토콜이 이 서비스에 내장되어 있습니다.
작업 DDL¶
작업 생성 및 관리를 지원하기 위해 Snowflake는 다음과 같은 특수 DDL 작업 세트를 제공합니다.
또한, 공급자는 다음과 같은 표준 액세스 제어 DDL을 사용하여 ELT에 필요한 데이터베이스 오브젝트에 대한 액세스를 확인, 권한 부여 또는 취소할 수 있습니다.
DatabaseRoleResource 메서드:
grant_future_privileges
grant_privileges
grant_privileges_on_all
grant_role
iter_future_grants_to
iter_grants_to
revoke_future_privileges
revoke_grant_option_for_future_privileges
revoke_grant_option_for_privileges
revoke_grant_option_for_privileges_on_all
revoke_privileges
revoke_privileges_on_all
revoke_role
RoleResource (계정 역할) 메서드를 사용할 수 있습니다.
grant_future_privileges
grant_privileges
grant_privileges_on_all
grant_role
iter_future_grants_to
iter_grants_of
iter_grants_on
iter_grants_to
revoke_future_privileges
revoke_grant_option_for_future_privileges
revoke_grant_option_for_privileges
revoke_grant_option_for_privileges_on_all
revoke_privileges
revoke_privileges_on_all
revoke_role
UserResource 메서드:
grant_role
iter_grants_to
revoke_role
작업 함수¶
작업에 대한 정보 검색을 지원하기 위해 Snowflake는 다음과 같은 함수 세트를 제공합니다.