DYNAMIC_TABLE_REFRESH_HISTORY

DYNAMIC_TABLE_REFRESH_HISTORY

이 테이블 함수는 동적 테이블(dynamic tables)의 각 새로 고침(완료 및 실행 중)에 대한 정보를 반환해요. 이 테이블 함수는 진행 중인 모든 새로 고침과 현재 시간에서 7일 이내의 DATA_TIMESTAMP를 가진 모든 새로 고침을 반환해요.

출처: Snowflake SQL Reference - DYNAMIC_TABLE_REFRESH_HISTORY

본문

구문

DYNAMIC_TABLE_REFRESH_HISTORY(
  [ DATA_TIMESTAMP_START => <constant_expr> ]
  [ , DATA_TIMESTAMP_END => <constant_expr> ]
  [ , RESULT_LIMIT => <integer> ]
  [ , NAME => '<string>' ]
  [ , NAME_PREFIX => '<string>' ]
  [ , ERROR_ONLY => { TRUE | FALSE } ]
)

인자

모든 인자는 선택적이에요. 인자가 제공되지 않으면 계정의 모든 동적 테이블에서 100개의 새로 고침이 반환돼요.

  • 새로 고침이 발생한 시간 범위(TIMESTAMP_LTZ 형식)예요.
    • 시작 버전도 종료 버전도 지정되지 않으면 기본 범위는 지난 하루예요.
    • 종료 버전이 지정되지 않으면 CURRENT_TIMESTAMP가 범위의 끝으로 사용돼요.
    • 시작 버전이 지정되지 않으면 범위는 DATE_TIMESTAMP_END 시작 1일 전부터 시작해요.
  • 함수가 반환하는 최대 행 수를 지정하는 숫자예요. 일치하는 행 수가 이 제한보다 크면 가장 최근에 완료된 새로 고침(및 여전히 실행 중인 것)이 지정된 제한까지 반환돼요. 결과에 필터를 적용하려면 필터가 모든 동적 테이블에 적용되도록 충분히 큰 RESULT_LIMIT 제한 값도 지정해요. 범위: 1~10000. 기본값: 100.
  • 동적 테이블의 이름이에요. 이름은 작은따옴표로 묶어야 하며 대소문자를 구분하지 않아요. 정규화되지 않은 이름(dynamic_table_name), 부분적으로 정규화된 이름(schema_name.dynamic_table_name), 또는 완전히 정규화된 이름(database_name.schema_name.dynamic_table_name)을 지정할 수 있어요. 객체 이름 해석에 대한 자세한 내용은 Object name resolution을 참고해요. 함수는 이 테이블의 새로 고침을 반환해요.
  • 동적 테이블의 접두사예요. 이름 접두사는 작은따옴표로 묶어야 하며 대소문자를 구분하지 않아요. 함수는 이 접두사로 시작하는 이름을 가진 테이블의 새로 고침을 반환해요. 이 인자를 사용해 특정 데이터베이스 또는 스키마의 동적 테이블에 대한 새로 고침을 반환할 수 있어요.
  • TRUE로 설정하면 이 함수는 실패했거나 취소된 새로 고침만 반환해요.

출력

함수는 다음 컬럼을 반환해요. 이 컬럼을 보려면 MONITOR 권한이 있는 역할을 사용해야 해요. 자세한 내용은 Grant MONITOR to view metadata를 참고해요.

Column Name Data Type Description
NAME TEXT 동적 테이블의 이름이에요.
SCHEMA_NAME TEXT 동적 테이블을 포함하는 스키마의 이름이에요.
DATABASE_NAME TEXT 동적 테이블을 포함하는 데이터베이스의 이름이에요.
STATE TEXT 동적 테이블에 대한 새로 고침의 상태예요. 상태는 다음 중 하나일 수 있어요. SCHEDULED: 새로 고침이 예약되었지만 아직 실행되지 않음. EXECUTING: 새로 고침이 진행 중. SUCCEEDED: 새로 고침이 성공적으로 완료됨. FAILED: 새로 고침이 실행 중 실패. CANCELLED: 새로 고침이 실행 전에 취소됨. UPSTREAM_FAILED: 상위 새로 고침 실패로 새로 고침이 수행되지 않음. SKIPPED: 상위 동적 테이블 새로 고침이 건너뛰어졌거나 스케줄러가 대상 지연 시간 내 시간을 최대화하기 위해 새로 고침을 연기해서 새로 고침이 수행되지 않음.
STATE_CODE TEXT 새로 고침의 현재 상태를 나타내는 코드예요.
STATE_MESSAGE TEXT 새로 고침의 현재 상태에 대한 설명이에요.
QUERY_ID TEXT 동적 테이블의 결과를 생성한 SQL 문의 ID예요.
DATA_TIMESTAMP TIMESTAMP_LTZ 새로 고침이 평가된 트랜잭션 타임스탬프예요. (실제 새로 고침 시간보다 약간 이전일 수 있어요.) 이 타임스탬프 이전에 기본 객체에 도착한 모든 데이터가 현재 동적 테이블에 포함돼요.
REFRESH_START_TIME TIMESTAMP_LTZ 새로 고침 작업이 시작된 시각이에요.
REFRESH_END_TIME TIMESTAMP_LTZ 새로 고침이 완료된 시각이에요.
COMPLETION_TARGET TIMESTAMP_LTZ 동적 테이블의 TARGET_LAG 파라미터 아래에 지연 시간을 유지하기 위해 이 새로 고침이 완료되어야 하는 시각이에요. 이는 마지막 새로 고침의 DATA_TIMESTAMP + TARGET_LAG와 같아요.
QUALIFIED_NAME TEXT 동적 테이블 그래프에 나타나는 동적 테이블의 완전 정규화 이름이에요. 이를 사용해 출력을 DYNAMIC_TABLE_GRAPH_HISTORY 함수의 출력과 조인할 수 있어요.
LAST_COMPLETED_DEPENDENCY OBJECT 다음 속성을 포함해요. qualified_name: 사용 가능해진 최신 종속성의 정규화된 이름. data_timestamp: 그 종속성의 새로 고침 버전.
STATISTICS OBJECT 다음 속성을 포함해요. numInsertedRows: 삽입된 행 수. numDeletedRows: 삭제된 행 수. numCopiedRows: 변경 없이 복사된 행 수. numAddedPartitions: 추가된 파티션 수. numRemovedPartitions: 제거된 파티션 수. queuedTimeMs: 대기 상태에서 보낸 시간(밀리초). compilationTimeMs: 새로 고침 쿼리를 컴파일하는 데 보낸 시간(밀리초). executionTimeMs: 새로 고침 쿼리를 실행하는 데 보낸 시간(밀리초). 성공적인 새로 고침의 경우 이 컬럼은 행/파티션 통계와 시간 분포 정보를 모두 포함해요. 예: { "numAddedPartitions": 1, "numCopiedRows": 0, "numDeletedRows": 25, "numInsertedRows": 36, "numRemovedPartitions": 1, "queuedTimeMs": 123, "compilationTimeMs": 456, "executionTimeMs": 789 } 실패한 새로 고침의 경우 이 컬럼은 시간 분포 정보만 포함해요. 예: { "queuedTimeMs": 123, "compilationTimeMs": 456, "executionTimeMs": 789 }. 참고: JSON 객체는 키와 값의 정렬되지 않은 집합이므로 출력의 속성 순서는 위 예시와 다를 수 있어요. 예를 들어 UPDATE 문이 10행이 있는 파티션에서 1행을 업데이트하면 행/파티션 메트릭은 1행 삽입, 1행 삭제, 9행 복사를 보여줘요. 추가로 파티션 1개가 제거되고 1개가 추가돼요.
REFRESH_ACTION TEXT 다음 중 하나: NO_DATA - 기본 테이블에 새 데이터가 없음. 기본 테이블에 데이터가 있는지 여부와 관계없이 새로 생성된 동적 테이블의 초기 새로 고침에는 적용되지 않음. REINITIALIZE - 기본 테이블 변경, 복제된 동적 테이블의 원본 테이블이 복제 중 새로 고침됨, 또는 ADAPTIVE 동적 테이블이 증분 처리 비용이 더 비싸서 다시 초기화하기로 선택. FULL - 동적 테이블에 증분화할 수 없는 쿼리 요소가 있거나(see SHOW DYNAMIC TABLE refresh_mode_reason) 전체 새로 고침이 증분 새로 고침보다 저렴해서 전체 새로 고침. INCREMENTAL - 일반 증분 새로 고침. CUSTOM_INCREMENTAL - 새로 고침이 REFRESH USING 절에서 사용자 정의 DML을 실행.
REINIT_REASON TEXT REFRESH_ACTION이 REINITIALIZE일 때 동적 테이블이 다시 초기화된 이유(기본 테이블 변경, 적응형 새로 고침 모드 결정 등)를 설명해요. 다른 새로 고침 작업에서는 NULL이에요.
REFRESH_TRIGGER TEXT 다음 중 하나: SCHEDULED - 대상 지연 시간 또는 다운스트림 대상 지연 시간을 충족하기 위한 일반 백그라운드 새로 고침. MANUAL - 사용자/태스크가 ALTER DYNAMIC TABLE <name> REFRESH를 사용. CREATION - 동적 테이블 또는 소비자 동적 테이블의 생성으로 트리거되어 생성 DDL 문 중에 수행된 새로 고침.
TARGET_LAG_SEC NUMBER 새로 고침이 발생한 시점의 동적 테이블에 대한 대상 지연 시간 값을 설명해요.
GRAPH_HISTORY_VALID_FROM TIMESTAMP_NTZ 특정 새로 고침이 어떤 동적 테이블 버전에 해당하는지 명확히 하기 위해 새로 고침이 발생한 시점의 DYNAMIC_TABLE_GRAPH_HISTORY 테이블 함수의 VALID_FROM 타임스탬프를 인코딩해요. 해당 동적 테이블이 생성되지 않은 경우 이 값은 NULL일 수도 있어요.
INPUTS_WITH_CHANGED_DATA ARRAY of OBJECTs 각 OBJECT는 이 동적 테이블의 입력 역할을 하고 이 새로 고침 동안 변경된 데이터가 있었던 테이블, 뷰 또는 동적 테이블을 나타내요. 각 OBJECT는 다음으로 구성돼요. name (TEXT): 완전 정규화 이름. kind (TEXT): 입력 유형(TABLE, DYNAMIC_TABLE 또는 VIEW). statistics (OBJECT): TABLE 및 DYNAMIC_TABLE 입력에 존재. 포함: numRegisteredRows: 이 입력에 추가된 행 수. numUnregisteredRows: 이 입력에서 제거된 행 수. numAddedPartitions: 추가된 파티션 수. numRemovedPartitions: 제거된 파티션 수. baseTableStatisticsAgg (OBJECT): statistics 대신 VIEW 입력에 존재. 동일한 하위 속성을 포함. 뷰는 자체 DML이 없으므로 뷰의 기본 기본 테이블에서 DML 통계를 합산. 여러 VIEW 입력이 기본 기본 테이블을 공유하면 그 기본 테이블은 각 뷰의 통계에 독립적으로 기여. 예: [ { "name": "MY_DB.MY_SCHEMA.MY_TABLE", "kind": "TABLE", "statistics": { "numRegisteredRows": 9, "numUnregisteredRows": 0, "numAddedPartitions": 2, "numRemovedPartitions": 0 } }, { "name": "MY_DB.MY_SCHEMA.MY_VIEW", "kind": "VIEW", "baseTableStatisticsAgg": { "numRegisteredRows": 4, "numUnregisteredRows": 0, "numAddedPartitions": 1, "numRemovedPartitions": 0 } } ] 참고: JSON 객체는 정렬되지 않은 집합이므로 출력의 속성 순서는 위 예시와 다를 수 있어요. 다음과 같은 경우 NULL: REFRESH_ACTION이 NO_DATA(입력 변경 없음)인 경우. 새로 고침이 어떤 입력이 변경되었는지 식별하기 전에 실패한 경우. 실패한 새로 고침의 경우 컬럼은 실패 전에 변경된 것으로 식별할 수 있었던 모든 입력으로 채워져요.

사용상 주의사항

  • Information Schema 테이블 함수를 호출할 때는 세션에 INFORMATION_SCHEMA 스키마가 사용 중이어야 하거나 함수 이름이 완전히 정규화되어야 해요. 자세한 내용은 Snowflake Information Schema를 참고해요.

예시

실패했거나 취소된 새로 고침을 검색해요.

SELECT
  name,
  state,
  state_code,
  state_message,
  query_id,
  data_timestamp,
  refresh_start_time,
  refresh_end_time
FROM
  TABLE (
    INFORMATION_SCHEMA.DYNAMIC_TABLE_REFRESH_HISTORY (
      NAME_PREFIX => 'MYDB.MYSCHEMA.', ERROR_ONLY => TRUE
    )
  )
ORDER BY
  name,
  data_timestamp;

더 알아보기