SYSTEM$TASK_RUNTIME_INFO

SYSTEM$TASK_RUNTIME_INFO

현재 태스크 실행에 대한 정보를 반환해요. 이 함수를 태스크 실행 밖에서 호출하면 오류로 실패해요.

출처: Snowflake SYSTEM$TASK_RUNTIME_INFO 함수 문서

본문

구문 (Syntax)

SYSTEM$TASK_RUNTIME_INFO('')

인자 (Arguments)

  • 'arg_name' — 반환할 정보의 유형을 지정해요. 다음 값 중 하나를 지정할 수 있어요:
값 설명
'CURRENT_TASK_NAME' 현재 태스크의 이름을 반환
'CURRENT_ROOT_TASK_NAME' 현재 태스크 그래프에서 루트 태스크의 이름을 반환
'CURRENT_ROOT_TASK_UUID' 현재 태스크 그래프에서 루트 태스크를 나타내는 범용 고유 식별자(UUID)를 반환
'CURRENT_TASK_GRAPH_RUN_GROUP_ID' 현재 그래프 실행 그룹을 나타내는 범용 고유 식별자(UUID)를 반환
'CURRENT_TASK_GRAPH_ORIGINAL_SCHEDULED_TIMESTAMP' 현재 그래프 실행 그룹에서 루트 태스크의 원래 예약된 타임스탬프를 반환. 재시도되는 그래프의 경우 반환 값은 현재 그룹에서 초기 그래프 실행의 원래 예약된 타임스탬프예요.
'LAST_SUCCESSFUL_TASK_GRAPH_RUN_GROUP_ID' 가장 최근 성공한 그래프 실행 그룹을 나타내는 범용 고유 식별자(UUID)를 반환. 값은 그래프 실행 그룹 전체에서 일관되며, 초기 그래프 실행의 루트 태스크가 시작될 때 결정돼요.
'LAST_SUCCESSFUL_TASK_GRAPH_ORIGINAL_SCHEDULED_TIMESTAMP' 가장 최근 성공한 그래프 실행 그룹에서 루트 태스크의 원래 예약된 타임스탬프를 반환. 값은 그래프 실행 그룹 전체에서 일관되며, 초기 그래프 실행의 루트 태스크가 시작될 때 결정돼요.

반환 값 (Returns)

요청된 정보가 담긴 STRING 또는 TEXT를 반환해요.

사용 노트 (Usage Notes)

  • SYSTEM$TASK_RUNTIME_INFO에는 CALL 대신 SELECT를 사용하는 것이 좋아요. SELECT SYSTEM$TASK_RUNTIME_INFO는 데이터 타입을 자동으로 변환하지만 CALL SYSTEM$TASK_RUNTIME_INFO는 변환하지 않기 때문이에요.

예제 (Examples)

디버깅 및 고유 출력 디렉터리 또는 파일 생성에 CURRENT_TASK_GRAPH_RUN_GROUP_ID를 CURRENT_ROOT_TASK_NAME과 함께 사용:

CREATE OR REPLACE TASK my_task ...
  AS
  ...

  -- Inside Python UDF

  query_result = session.sql("""select
        SYSTEM$TASK_RUNTIME_INFO('CURRENT_ROOT_TASK_NAME')
        AS root_name,
        SYSTEM$TASK_RUNTIME_INFO('CURRENT_TASK_GRAPH_RUN_GROUP_ID')
        AS run_id""").collect()
  current_root_task_name, current_graph_run_id = result.ROOT_NAME, result.RUN_ID

  -- Logging information here

  logger.debug(f"start training for {current_root_task_name} at run {current_graph_run_id}")

  -- Create a unique output directory to store intermediate information

  output_dir_name = f"{current_root_task_name}/{current_graph_run_id}/preprocessing.out"
  with open(output_dir_name, "rw+") as f:
    ....
...;

스트리밍 입력 소스의 데이터를 처리하기 위해 CURRENT_TASK_GRAPH_ORIGINAL_SCHEDULED_TIMESTAMP를 LAST_SUCCESSFUL_TASK_GRAPH_ORIGINAL_SCHEDULED_TIMESTAMP와 함께 사용:

CREATE OR REPLACE TASK my_task ...
  AS
  ...
  INSERT INTO my_output_table
    SELECT * FROM my_source_table
      WHERE TRUE
        ...
        AND TIMESTAMP BETWEEN
          COALESCE(
            SYSTEM$TASK_RUNTIME_INFO('LAST_SUCCESSFUL_TASK_GRAPH_ORIGINAL_SCHEDULED_TIMESTAMP')::timestamp_ltz,
            '2023-07-01'
          ) AND SYSTEM$TASK_RUNTIME_INFO('CURRENT_TASK_GRAPH_ORIGINAL_SCHEDULED_TIMESTAMP')::timestamp_ltz
   ...;

고유 출력 디렉터리와 로그 줄을 생성하기 위해 LAST_SUCCESSFUL_TASK_GRAPH_RUN_GROUP_ID 사용:

CREATE OR REPLACE TASK my_task ...
  AS
  ...

  -- Inside Python UDF

  query_result = session.sql("select
      SYSTEM$TASK_RUNTIME_INFO('CURRENT_ROOT_TASK_NAME') AS root_name, SYSTEM$TASK_RUNTIME_INFO('LAST_SUCCESSFUL_TASK_GRAPH_RUN_GROUP_ID') AS last_run_id").collect()
  current_root_task_name, last_graph_run_id = query_result.ROOT_NAME,query_result.LAST_RUN_ID
  logger.log(f"graph name: {current_root_task_name}, last successful run: {last_graph_run_id}")
  ...;

더 알아보기