작업 소개¶
작업은 데이터 처리를 자동화하고 데이터 파이프라인에서 비즈니스 프로시저를 최적화하는 강력한 방법입니다.
작업은 예약된 시간에 실행되거나 새 데이터가 :doc:` 스트림</user-guide/streams-intro>`에 도착하는 경우와 같은 이벤트에 의해 트리거될 수 있습니다.
작업은 JavaScript, Python, Java, Scala 및 :doc:`Snowflake 스크립팅</developer-guide/snowflake-scripting/index>`을 포함하여 :ref:`지원되는 언어와 도구<label-stored-procedures-handler-languages>`를 사용하는 SQL 명령 및 저장 프로시저를 실행할 수 있습니다.
복잡한 워크플로의 경우 :doc:`작업 그래프</user-guide/tasks-graphs>`라는 작업 시퀀스를 생성할 수 있습니다. 작업 그래프는 논리를 통해 동적 동작을 수행하여 작업을 병렬 또는 직렬로 실행할 수 있습니다.
이 항목의 내용:
제한 사항¶
:doc:`/user-guide/data-load-schema-evolution`은 작업에서 지원되지 않습니다.
작업 생성 워크플로 개요¶
다음 단계에 따라 명령을 실행할 수 있는 작업 관리자 역할 을 만듭니다.
CREATE TASK 를 사용하여 새 작업을 정의합니다.
EXECUTE TASK 를 사용하여 작업을 수동으로 테스트합니다.
ALTER TASK … RESUME 을 사용하여 작업을 계속 실행하도록 허용합니다.
ALTER TASK 을 사용하여 필요에 따라 작업을 구체화합니다.
작업 실행에 대한 자세한 내용은 다음을 참조하십시오.
컴퓨팅 리소스 정의하기¶
작업에는 문과 프로시저를 실행하기 위한 컴퓨팅 리소스가 필요합니다. 다음 두 모델 중에서 선택할 수 있습니다.
서버리스 작업: Snowflake는 필요한 리소스를 예측하고 자동으로 할당합니다.
사용자 관리 가상 웨어하우스 모델: 가상 웨어하우스를 사용하여 컴퓨팅 리소스를 관리합니다.
서버리스 작업¶
이 모델에서는 작업을 실행할 시점을 설정하면 Snowflake가 해당 시간에 작업을 완료하는 데 필요한 컴퓨팅 리소스를 예측하고 할당합니다. 예측은 동일한 작업의 가장 최근 실행에 대한 동적 분석을 기반으로 합니다.
제한 사항¶
서버리스 작업의 최대 컴퓨팅 크기는 XXLARGE 가상 웨어하우스 와 동일합니다.
서버리스 컴퓨팅 모델을 사용하여 작업 만들기¶
:doc:`/sql-reference/sql/create-task`를 사용하여 작업을 정의합니다. WAREHOUSE 매개 변수는 포함하지 마세요.
작업을 실행하는 역할에는 전역 EXECUTE MANAGED TASK 권한이 있어야 합니다. 자세한 내용은 작업 보안 섹션을 참조하세요.
다음 예제에서는 매시간 실행되는 작업을 생성합니다.
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),
),
)
비용 및 성능: 웨어하우스 크기¶
서버리스 작업을 효율적으로 실행하기 위해 다음 매개 변수를 설정하여 최소 및 최대 :ref:`웨어하우스 크기<label-warehouse_size>`를 설정할 수 있습니다.
SERVERLESS_TASK_MIN_STATEMENT_SIZE: 예측 가능한 성능을 위한 최소 웨어하우스 크기(기본값: XSMALL).
SERVERLESS_TASK_MAX_STATEMENT_SIZE: 예기치 않은 비용을 방지하기 위한 최대 웨어하우스 크기(기본값: XXLARGE).
작업이 완료되면 Snowflake는 성능을 검토하고 이러한 제한 내에서 향후 실행을 위해 컴퓨팅 리소스를 조정합니다.
다음 예제에서는 최소 웨어하우스 크기가 SMALL이고 최대 웨어하우스 크기가 LARGE인 상태에서 30초마다 실행되는 작업을 보여줍니다.
CREATE TASK SCHEDULED_T2
SCHEDULE='30 SECONDS'
SERVERLESS_TASK_MIN_STATEMENT_SIZE='SMALL'
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=timedelta(seconds=30),
serverless_task_min_statement_size="SMALL",
serverless_task_max_statement_size="LARGE",
),
)
목표 완료 간격¶
완료할 서버리스 작업의 이전 대상을 설정할 수 있습니다. :ref:`서버리스 트리거 작업<label-tasks-triggered-migrate-serverless>`에는 목표 완료 간격이 필요합니다.
목표 완료 간격을 설정하는 경우 Snowflake는 목표 완료 간격 내에서 완료할 리소스를 예측하고 확장합니다. 작업이 이미 최대 웨어하우스 크기에 있고 너무 오래 실행 중인 경우 목표 완료 간격이 무시됩니다.
다음 예제에서 작업은 매일 자정에 실행되며, 완료 목표는 오전 2시입니다. 시작 시간과 타임존은 :ref:`USING CRON<label-create_task_schedule>`으로 정의됩니다. 작업이 최대 웨어하우스 크기에 도달하면 마지막으로 시간 제한이 트리거되기 전까지 최대 3시간 동안 실행될 수 있습니다.
CREATE TASK SCHEDULED_T3
SCHEDULE='USING CRON 0 * * * * America/Los_Angeles'
TARGET_COMPLETION_INTERVAL='120 MINUTE'
SERVERLESS_TASK_MAX_STATEMENT_SIZE='LARGE'
USER_TASK_TIMEOUT_MS = 10800000 -- (3 hours)
SUSPEND_TASK_AFTER_NUM_FAILURES = 3
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 * * * *", "America/Los_Angeles"),
target_completion_interval=timedelta(minutes=120),
serverless_task_max_statement_size="LARGE",
user_task_timeout_ms=10800000, # (3 hours)
suspend_task_after_num_failures=3,
),
)
사용자 관리형 가상 웨어하우스 모델¶
이 모델을 사용하면 각 워크로드에 사용되는 컴퓨팅 리소스를 완벽하게 제어할 수 있습니다.
웨어하우스 선택¶
웨어하우스를 선택할 때 다음 사항을 고려하세요.
사용자 관리 컴퓨팅 모델을 사용하여 작업 만들기¶
:doc:`/sql-reference/sql/create-task`를 사용하고 WAREHOUSE 매개 변수를 포함합니다.
작업을 실행하는 역할에는 전역 EXECUTE MANAGED TASK 권한이 있어야 합니다. 자세한 내용은 작업 보안 섹션을 참조하세요.
다음 예제에서는 매시간 실행되는 작업을 생성합니다.
CREATE TASK SCHEDULED_T1
WAREHOUSE='COMPUTE_WH'
SCHEDULE='60 MINUTES'
AS SELECT 1;
컴퓨팅 모델 선택 권장 사항¶
다음 표에서는 서버리스 작업과 사용자 관리 작업을 사용할 시점을 결정하는 데 도움이 될 수 있는 다양한 요소를 설명합니다.
카테고리 |
서버리스 작업 |
사용자 관리 작업 |
참고 |
---|---|---|---|
동시 작업 워크로드의 수, 지속 기간, 예측 가능성 |
동시에 실행되는 작업이 너무 적거나 완료 속도가 너무 빨라 활용도가 낮은 웨어하우스에 권장됩니다. 비교적 안정적으로 실행되는 작업은 서버리스 작업에 적합한 후보입니다. |
여러 동시 작업이 진행되고 활용도가 높은 웨어하우스에 권장됩니다. 컴퓨팅 리소스에 대한 부하가 예측할 수 없을 때도 권장됩니다. 자동 일시 중단 및 자동 재개 가 활성화된 멀티 클러스터 웨어하우스 는 크레딧 소비를 조정하는 데 도움이 될 수 있습니다. |
서버리스 작업의 경우 Snowflake는 실제 컴퓨팅 리소스 사용량을 기준으로 계정에 대한 요금을 청구합니다. 사용자 관리 작업의 경우 웨어하우스에 대한 청구는 웨어하우스 규모를 기준으로 하며, 웨어하우스가 재개될 때마다 최소 60초 단위로 청구됩니다. |
예약 간격 |
예약 간격 준수가 매우 중요할 때 권장됩니다. 독립 실행형 작업이나 예약된 작업 그래프의 실행이 간격을 초과하면 Snowflake가 컴퓨팅 리소스의 크기를 늘립니다. |
예약 간격 준수가 덜 중요할 때 권장됩니다. |
*예약 간격*은 작업 그래프에서 독립 실행형 작업 또는 루트 작업의 예약 실행 간 시간 간격을 나타냅니다. 컴퓨팅 리소스를 늘리면 전부는 아니지만 일부 SQL 코드의 실행 시간이 단축될 수 있습니다. 배치 윈도우 내에서 작업 실행이 완료되지는 않습니다. |
서버리스 작업 실행의 최대 크기는 XXLARGE 웨어하우스에 해당하는 크기입니다. 작업 워크로드에 더 큰 웨어하우스가 필요한 경우, 필요한 크기의 웨어하우스로 사용자 관리 작업을 만듭니다.
예약 또는 트리거 정의하기¶
작업은 예약된 일정에 따라 실행되도록 설정하거나 스트림에 새로운 데이터가 있을 때와 같이 이벤트에 의해 트리거될 수 있습니다.
작업이 생성되면 일시 중단된 상태로 시작됩니다. 작업이 일정을 따르거나 이벤트를 지속적으로 감지하도록 허용하려면 ALTER TASK … RESUME</sql-reference/sql/alter-task>`을 사용합니다. 작업을 한 번 실행하려면 :doc:/sql-reference/sql/execute-task`를 사용합니다.
예약된 일정에 따라 작업 실행하기¶
고정된 일정에 따라 작업을 실행하려면 CREATE TASK 또는 :doc:`/sql-reference/sql/alter-task`를 사용하여 작업을 생성하거나 변경할 때 일정을 정의하거나, SCHEDULE 매개 변수를 사용하여 |sf-web-interface|에서 작업을 편집합니다.
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 섹션을 참조하십시오.
스트림에 새로운 데이터가 있을 때마다 작업 실행¶
정의된 스트림</user-guide/streams-intro>`에 새 데이터가 있을 때마다 작업을 실행하려면 :doc:/user-guide/tasks-triggered`를 사용합니다. 이 방법은 새 데이터 도착을 예측할 수 없을 때 소스를 자주 폴링하지 않아도 되기 때문에 추출, 로드, 변환(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 또는 |sf-web-interface|를 사용하여 계정의 작업 기록을 볼 수 있습니다.
|sf-web-interface|에서 작업 기록을 보려면 작업 기록 보기 섹션을 참조하세요.
필요한 권한에 대한 정보는 작업 기록 뷰 섹션을 참조하십시오.
단일 작업의 실행 기록을 보는 방법은 다음과 같습니다.
- 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 문을 실행하기 위한 웨어하우스 사용량과 유사하게, 작업이 실행되는 동안의 웨어하우스 사용량을 기준으로 :ref:`크레딧 사용<label-virtual_warehouse_credit_usage>`에 대해 계정에 요금을 청구합니다. 초당 크레딧 청구 및 웨어하우스 자동 일시 중단을 사용하여 더 큰 웨어하우스 크기로 시작한 후 작업 워크로드에 따라 크기를 조정할 수 있는 유연성이 제공됩니다.
- 서버리스 컴퓨팅 모델
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를 참조하십시오.
작업 기간¶
작업 기간에는 작업이 시작되도록 예약된 시점부터 완료될 때까지의 시간이 포함됩니다. 이 기간에는 다음이 모두 포함됩니다.
큐 대기 시간: 작업이 시작되기 전에 컴퓨팅 리소스를 사용할 수 있을 때까지 기다리는 데 소요되는 시간입니다. 큐 대기 시간을 계산하려면 :doc:`/sql-reference/account-usage/task_history`를 쿼리하고 SCHEDULED_TIME 및 QUERY_START_TIME을 비교합니다.
실행 시간: 작업이 SQL 문이나 기타 작업을 실행하는 데 소요되는 시간입니다. 실행 시간을 계산하려면 :doc:`/sql-reference/account-usage/task_history`를 쿼리하고 QUERY_START_TIME 및 COMPLETED_TIME을 비교합니다.
예를 들어, 다음 다이어그램은 15초마다 실행되도록 예약된 서버리스 작업을 보여줍니다. 이 작업 실행의 총 지속 시간은 12초이며, 여기에는 5초의 큐 대기 시간과 7초의 실행 시간이 포함됩니다.
시간 제한¶
작업 실행이 예약된 시간 또는 대상 완료 간격을 초과하는 경우 기본적으로 작업이 완료되거나 시간 초과 또는 실패할 때까지 계속 실행됩니다.
STATEMENT_TIMEOUT_IN_SECONDS 및 label-user_task_timeout_ms`가 모두 설정된 경우 시간 제한은 두 매개 변수 중 0이 아닌 :emph:`가장 낮은 값이 됩니다.
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'))
사용자 지정 역할 및 역할 계층 구조를 만드는 방법에 대한 자세한 내용은 액세스 제어 구성하기 섹션을 참조하세요.
작업 소유자 역할 삭제¶
작업의 소유자 역할을 삭제하면 작업은 소유자 역할을 삭제한 역할에 소유권을 이전합니다. 작업이 소유권을 이전하면 자동으로 일시 중지되고 새 소유자가 작업을 재개할 때까지 새 작업 실행이 예약되지 않습니다.
작업이 실행되는 중에 역할을 삭제하면 작업 실행은 삭제된 역할에서 처리를 완료합니다.
시스템 서비스에서 실행하는 작업¶
기본적으로 작업은 사용자와 분리된 시스템 서비스로 실행됩니다.
시스템 서비스는 작업 소유자와 동일한 권한을 사용하여 작업을 실행합니다.
이를 통해 사용자 관리와 관련된 복잡성을 피할 수 있습니다. 예를 들어, 사용자가 삭제되거나 인증 문제로 인해 잠기거나 역할이 제거된 경우에도 작업이 중단 없이 계속 실행됩니다.
작업 실행에 대한 쿼리 기록은 시스템 서비스와 연결됩니다. 이 서비스에는 사용자 자격 증명이 없으며, 어떤 개인도 이 서비스의 ID를 추측할 수 없습니다. 시스템 서비스에 대한 활동은 사용자 계정으로 제한됩니다. 다른 작업에 적용되는 것과 동일한 암호화 보호 및 기타 보안 프로토콜이 이 서비스에 내장되어 있습니다.
사용자 권한으로 작업 실행하기¶
작업 소유자 역할의 권한 외에도 특정 사용자의 권한으로 실행되도록 작업을 구성할 수 있습니다. EXECUTE AS USER를 지정하는 작업은 시스템 서비스 대신 명명된 사용자를 대신하여 실행됩니다.
다중 역할 권한 관리: 사용자에게 보조 역할이 있는 경우 사용자는 기본 역할과 보조 역할의 결합된 권한을 사용하여 작업을 실행할 수 있습니다. 이 구성을 통해 작업에 필요한 모든 리소스에 액세스하는 데 필요한 권한이 부여됩니다.
사용자 기반 데이터 마스킹 및 행 액세스 정책 활용: 데이터 거버넌스 정책에서 쿼리하는 사용자를 고려하는 경우 사용자로 작업을 실행하면 작업이 해당 정책과 호환되는지 확인할 수 있습니다.
모든 작업에 대한 책임 제공: EXECUTE AS USER로 실행되는 작업의 모든 인스턴스는 SYSTEM 사용자 대신 구성된 사용자에게 귀속됩니다. 이 특성은 모든 작업에 대한 명확한 감사 추적을 유지하는 데 도움이 됩니다.
액세스 제어¶
작업의 소유자 역할에는 EXECUTE AS USER로 지정한 사용자에 대한 IMPERSONATE 권한이 부여되어야 하며, 지정된 사용자에게 작업의 소유자 역할이 부여되어야 합니다.
작업이 실행되면 작업 세션의 기본 역할이 작업의 소유자 역할이 되고 사용자의 기본 보조 역할이 활성화됩니다. 사용자는 USE ROLE 명령을 사용하여 기본 역할을 전환하고 USE SECONDARY ROLES 명령으로 작업 세션에서 보조 역할을 조정합니다.
예제: 서비스 사용자 및 팀 역할 설정하기¶
관리자 역할을 사용하여 작업에 사용할 서비스 사용자를 설정합니다.
다음 예제에서는 이름이 :samp:`task_user`인 서비스 사용자를 생성합니다.
USE ROLE ACCOUNTADMIN; CREATE USER task_user;
작업 역할을 만든 다음 서비스 사용자에게 부여합니다.
CREATE ROLE task_role; GRANT ROLE task_role to USER task_user;
작업 역할이 팀 사용자 역할을 대신하여 쿼리를 실행하도록 허용합니다.
GRANT IMPERSONATE ON USER task_user TO ROLE task_role;
작업 역할에 적절한 권한을 부여합니다.
USE ROLE ACCOUNTADMIN; -- Grant the team role the privileges to create tasks in a specific schema GRANT CREATE TASK ON SCHEMA schema1 TO ROLE task_role; -- Grant the team role the privileges to use a specific warehouse GRANT USAGE ON WAREHOUSE warehouse1 TO ROLE task_role; -- Grant the team role the privileges to run tasks on a serverless compute model GRANT EXECUTE MANAGED TASK ON ACCOUNT TO ROLE task_role;
서비스 사용자를 대신하여 작업 실행하기¶
팀 역할이 작업의 소유권을 갖게 되면 팀 구성원이 작업을 수정하고 서비스 사용자를 대신하여 실행할 수 있습니다.
예:
USE ROLE task_owner;
CREATE TASK team_task
SCHEDULE='12 HOURS'
EXECUTE AS USER task_user
AS SELECT 1;
이전 예제에서, 결과 로그는 :samp:`task_user`가 작업을 수정했음을 보여줍니다.
(테스트 전용) 사용자가 다른 사용자를 직접 가장하도록 허용¶
변경 사항을 테스트하거나 프로토타입을 만들 때 관리자는 사용자가 다른 사용자를 직접 가장하도록 허용할 수 있습니다. 이 시나리오는 지원되지만 프로덕션 환경에서는 권장되지 않습니다.
가장을 위한 역할을 설정합니다.
USE ROLE ACCOUNTADMIN; CREATE ROLE janes_role; GRANT ROLE janes_role to USER jane; GRANT IMPERSONATE ON USER jane TO ROLE janes_role;
새 역할을 사용하여 작업을 만듭니다.
USE ROLE janes_role; CREATE TASK janes_task SCHEDULE='60 M' AS SELECT 1;
다른 사용자에게 역할을 부여합니다.
다음 예제에서는 사용자 Jane이 사용자 Billy에게 액세스 권한을 부여합니다.
--Logged in as Jane or account admin GRANT ROLE janes_role to USER billy;
다른 사용자가 작업을 수정합니다.
다음 예제에서는 사용자 Billy가 작업을 수정합니다.
-- Logged in as billy USE ROLE janes_role; ALTER TASK janes_task SET EXECUTE AS USER jane;
로그를 검토합니다.
SHOW GRANTS TO ROLE 명령은 Jane이 Billy에게 역할을 부여했음을 보여줍니다. 그러면 QUERY_HISTORY 뷰에 Billy가 작업을 수정했다고 표시됩니다. 향후 작업 실행은 여전히 Jane이 실행한 것으로 표시됩니다.
USE ROLE ACCOUNTADMIN; SHOW GRANTS TO ROLE janes_role; QUERY_HISTORY() WHERE QUERY_TEXT ILIKE '%janes_task%';
작업 데이터 정의 언어(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는 다음과 같은 함수 세트를 제공합니다.
더 많은 Python 예제¶
더 많은 Python 예제는 Python을 사용하여 Snowflake 작업 및 작업 그래프 관리하기 섹션을 참조하세요.