동적 테이블 모니터링하기¶
이 항목에서는 파이프라인의 동적 테이블을 보고 이해하는 방법에 대해 설명합니다.
섹션 |
설명 |
---|---|
스키마에 동적 테이블을 나열하고 해당 테이블에 대한 정보를 뷰로 볼 수 있습니다. |
|
동적 테이블에 연결된 테이블 그래프를 확인하십시오. |
|
SQL 테이블 함수를 사용하여 동적 테이블을 모니터링하십시오. |
|
동적 테이블의 새로 고침 상태를 봅니다. |
동적 테이블 목록 또는 특정 열에 대한 정보 보기¶
스키마에서 동적 테이블을 목록으로 생성하고 해당 동적 테이블에 대한 정보를 보려면 다음 SQL 명령 또는 동적 테이블에 대한 MONITOR 권한이 있는 역할을 사용하는 경우 Snowsight 를 사용할 수 있습니다.
자세한 내용은 동적 테이블의 메타데이터 보기 권한 섹션을 참조하십시오.
현재 데이터베이스(또는 현재 사용 중인 데이터베이스가 없는 경우에는 계정)의 동적 테이블을 나열하려면 SHOW DYNAMIC TABLES 명령을 사용하십시오.
예를 들어 데이터베이스 mydb
및 스키마 myschema
에서 이름이 product_
로 시작하는 동적 테이블을 나열하려면 다음 SQL 문을 실행하십시오.
SHOW DYNAMIC TABLES LIKE 'product_%' IN SCHEMA mydb.myschema;
+-------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| created_on | name | database_name | schema_name | cluster_by | rows | bytes | owner | target_lag | refresh_mode | refresh_mode_reason | warehouse | comment | text | automatic_clustering | scheduling_state | last_suspended_on | is_clone | is_replica | is_iceberg | data_timestamp | owner_role_type |
|-------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|2025-01-01 16:32:28 +0000 | product_dt | my_db | my_schema | | 2 | 2048 | ORGADMIN | DOWNSTREAM | INCREMENTAL | null | mywh | | create or replace dynamic table | OFF | ACTIVE | null | false | false | false |2025-01-01 16:32:28 +0000 | ROLE |
| product dt ... | | |
+-------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
동적 테이블의 열에 대한 정보를 출력하려면 DESCRIBE DYNAMIC TABLE 명령을 사용하십시오.
예를 들어, my_dynamic_table
에 열을 나열하려면 다음 SQL 문을 실행합니다.
DESC DYNAMIC TABLE my_dynamic_table;
+-------------------+--------------------------------------------------------------------------------------------------------------------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment | policy name | privacy domain |
|-------------------+------------------------------------------------------------------------------------------------------------------------|
| AMOUNT | NUMBER(38,0) | COLUMN | Y | null | N | N | null | null | null | null | null | | |
+-------------------+------------------------------------------------------------------------------------------------------------------------+
동적 테이블도 TABLES 뷰 의 결과에 포함됩니다.
스키마에 있는 동적 테이블을 목록으로 생성하고 특정 동적 테이블에 대한 정보를 보려면 다음과 같이 하십시오.
Snowsight 에 로그인합니다.
Data » Databases 를 선택합니다.
데이터베이스와 스키마를 선택합니다.
데이터베이스 오브젝트 탐색기에서 Dynamic Tables 탭을 선택하거나 Dynamic Tables 을 확장합니다.
특정 동적 테이블에 대한 정보를 보려면 Dynamic Tables 탭의 동적 테이블 목록 또는 데이터베이스 오브젝트 탐색기에서 해당 동적 테이블을 선택합니다.
이 페이지의 탭은 선택한 동적 테이블에 대한 다음 세부 정보를 제공합니다.
Table Details: 다음을 포함하여 동적 테이블에 대한 기본 정보를 표시합니다.
동적 테이블의 예약 상태입니다.
동적 테이블의 마지막 새로 고침 상태입니다. 새로 고침 실패의 경우 해당 상태 위로 마우스를 가져가면 오류에 대한 자세한 정보를 확인할 수 있습니다.
동적 테이블의 현재 및 목표 지연입니다.
테이블을 업데이트하는 데 증분 새로 고침 또는 전체 새로 고침 이 사용되는지 여부.
동적 테이블의 정의입니다.
동적 테이블의 태그입니다.
동적 테이블 작업에 부여된 권한입니다.
Columns: 동적 테이블의 열에 대한 정보.
Data Preview: 동적 테이블에 있는 최대 100개의 데이터 행 미리 보기.
Graph: 이 동적 테이블을 포함하는 방향 비순환 그래프(DAG) 를 표시합니다.
Refresh History: 새로 고침 기록과 지연 메트릭을 표시합니다.
동적 테이블에 연결된 테이블의 그래프 보기¶
종속성 보기는 동적 테이블 체인 문제를 해결하는 데 특히 유용합니다. Snowsight 에서 계보 그래프를 사용하여 주어진 동적 테이블이 어떤 동적 테이블에 종속되어 있는지 시각화할 수 있습니다. 예를 들어, 다음을 식별할 수 있습니다.
동적 테이블이 데이터를 가져오는 업스트림 종속성.
동적 테이블의 변경으로 인해 영향을 받을 수 있는 다운스트림 종속성.

종속성은 새로 고침 성능에 영향을 줄 수 있습니다. 예를 들어, 동적 테이블의 업스트림 테이블에 예약된 새로 고침 직전에 대규모 데이터 로딩이 추가되었다고 가정해 보겠습니다. 동적 테이블은 새로 고침이 완료될 때까지 대기하므로 목표 지연을 놓치게 됩니다. 계보 그래프에서 입력 테이블이 ‘실행 중’으로 표시되어 지연을 나타내는 것을 볼 수 있습니다.
특정 동적 테이블의 그래프를 보려면 다음과 같이 하십시오.
Snowsight 에 로그인합니다.
탐색 메뉴에서 Monitoring » Dynamic Tables 로 이동합니다.
동적 테이블을 선택합니다. 기본적으로 Graph 뷰가 표시됩니다. 그러면 동적 테이블의 노드가 선택된 그래프가 표시됩니다. 오른쪽의 Details 창에는 지연 메트릭 및 구성에 대한 정보가 표시됩니다.
그래프에 다른 테이블의 세부 정보를 표시하려면 해당 테이블을 선택합니다.
그래프를 업데이트하려면 그래프 위 표시줄에서 새로 고침 버튼을 선택합니다.

UPSTREAM_FAILED 오류 코드로 인해 새로 고침이 실패한 경우 그래프를 사용하여 실패의 원인이 된 업스트림 테이블을 시각화할 수 있습니다.

그래프에서 테이블의 전체 세부 정보를 보려면 동적 테이블 목록 또는 특정 열에 대한 정보 보기 를 참조하십시오.
SQL 테이블 함수를 사용하여 동적 테이블 모니터링하기¶
다음 INFORMATION_SCHEMA 테이블 함수를 사용하여 동적 테이블을 모니터링합니다.
DYNAMIC_TABLES: 현재 시간으로부터 7일 이내에 집계 지연 메트릭 및 가장 최근 새로 고침 상태를 포함하여 동적 테이블에 대한 메타데이터를 반환합니다.
DYNAMIC_TABLE_REFRESH_HISTORY: 새로 고침 상태 및 트리거, 목표 지연을 포함하여 동적 테이블의 완료 및 실행 중인 각 새로 고침에 대한 정보를 반환합니다.
DYNAMIC_TABLE_REFRESH_HISTORY 뷰: 이 Account Usage 뷰에는 동적 테이블 새로 고침 기록에 대한 정보도 표시됩니다. DYNAMIC_TABLE_REFRESH_HISTORY 테이블 함수의 데이터 보존 시간(7일)보다 긴 문제를 디버깅할 때 유용합니다.
DYNAMIC_TABLE_GRAPH_HISTORY: 각 동적 테이블의 기록, 속성, 다른 테이블 및 동적 테이블에 대한 종속성을 제공하는 정보를 반환합니다.
이 테이블 함수를 사용하여 지정된 시점에서 동적 테이블의 종속성 트리의 스냅샷을 얻을 수 있습니다.
출력에는 시간 경과에 따른 동적 테이블의 속성 변경 사항도 반영됩니다. 각 행은 동적 테이블과 특정 속성 세트를 나타냅니다. 동적 테이블의 속성(예: 목표 지연)을 변경하면 함수는 가장 최신의 속성을 반환합니다.
동적 테이블의 새로 고침 상태 모니터링¶
이 섹션에서는 전체 또는 특정 동적 테이블의 새로 고침 상태를 보는 방법에 대해 설명합니다.
새로 고침 문제 해결에 대해서는 건너뛰거나 느리거나 실패한 동적 테이블 새로 고침 문제 해결 및 일반적인 동적 테이블 새로 고침 문제 진단하기 을 참조하십시오.
모든 동적 테이블에 대한 새로 고침 모니터링¶
Snowsight 또는 DYNAMIC_TABLES 테이블 함수를 사용하여 모든 동적 테이블의 새로 고침 상태를 볼 수 있습니다.
Snowsight 에 로그인합니다. 탐색 메뉴에서 Monitoring » Dynamic Tables 를 선택합니다.
이 페이지에서 모든 동적 테이블의 상태와 마지막 새로 고침 상태를 볼 수 있습니다. 데이터베이스 또는 스키마별로 필터링하여 결과 범위를 좁힐 수도 있습니다.

DYNAMIC_TABLES 은 계정의 모든 동적 테이블에 대한 정보를 제공합니다.
다음 예제에서는 계정의 모든 동적 테이블과 관련 데이터베이스 및 스키마에 대한 상태 및 목표 지연에 대한 정보를 검색합니다.
SELECT
name,
database_name,
schema_name,
scheduling_state,
target_lag_type,
target_lag_sec,
FROM
TABLE (
INFORMATION_SCHEMA.DYNAMIC_TABLES ()
)
ORDER BY
name;
+--------------------+------------------------------+--------------------------------------------------------------------------------------------------+-----------------+----------------+
| NAME | DATABASE_NAME | SCHEMA_NAME | SCHEDULING_STATE | TARGET_LAG_TYPE | TARGET_LAG_SEC |
|--------------------+------------------------------+--------------------------------------------------------------------------------------------------|-----------------+----------------+
| MY_DYNAMIC_TABLE_1 | MY_DB_1 | MY_SCHEMA_1 | { | | |
| | | | "reason_code": "UPSTREAM_SUSPENDED_DUE_TO_ERRORS", | | |
| | | | "reason_message": "The DT was suspended because an input DT had 5 consecutive refresh errors", | | |
| | | | "state": "SUSPENDED", | | |
| | | | "suspended_on": "2025-04-14 11:49:09.576 Z" | USER_DEFINED | 60 |
| | | | } | | |
| MY_DYNAMIC_TABLE_2 | MY_DB_2 | MY_SCHEMA_2 | null | | |
+--------------------+------------------------------+--------------------------------------------------------------------------------------------------+-----------------+----------------|
다음 예제에서는 계정의 모든 동적 테이블에 대한 새로 고침에 대한 상태 및 각 상태에 대한 정보를 검색합니다.
-- latest_data_timestamp is the refresh timestamp associated with last successful refresh.
SELECT
name,
last_completed_refresh_state,
last_completed_refresh_state_code,
last_completed_refresh_state_message,
latest_data_timestamp,
time_within_target_lag_ratio,
maximum_lag_sec,
executing_refresh_query_id
FROM
TABLE (
INFORMATION_SCHEMA.DYNAMIC_TABLES ()
)
ORDER BY
name;
-- Both dynamic tables in the example below have a target lag of one minute.
+--------------------+------------------------------+-----------------------------------+-----------------------------------------------+-----------------------+------------------------------+-----------------+----------------------------+
| NAME | LAST_COMPLETED_REFRESH_STATE | LAST_COMPLETED_REFRESH_STATE_CODE | LAST_COMPLETED_REFRESH_STATE_MESSAGE | LATEST_DATA_TIMESTAMP | TIME_WITHIN_TARGET_LAG_RATIO | MAXIMUM_LAG_SEC | EXECUTING_REFRESH_QUERY_ID |
|--------------------+------------------------------+-----------------------------------+-----------------------------------------------|-----------------------+------------------------------+-----------------+----------------------------+
| MY_DYNAMIC_TABLE_1 | UPSTREAM_FAILED | UPSTREAM_FAILURE | Skipped refreshing because an input DT failed | 2025-04-12 09:00:48 | null | null | null |
| MY_DYNAMIC_TABLE_2 | SUCCEEDED | SUCCESS | null | 2025-04-12 09:01:36 | 0.999 | 125 | null |
+--------------------+------------------------------+-----------------------------------+-----------------------------------------------+-----------------------+------------------------------+-----------------+----------------------------+
특정 동적 테이블에 대한 모든 새로 고침 모니터링¶
Snowsight 또는 DYNAMIC_TABLES_REFRESH_HISTORY 테이블 함수를 사용하여 특정 동적 테이블의 새로 고침 기록을 볼 수 있습니다.
Snowsight 에 로그인합니다.
탐색 메뉴에서 Monitoring » Dynamic Tables 를 선택합니다.
동적 테이블을 선택한 다음 Refresh History 탭으로 이동합니다.
이 페이지에는 각 새로 고침의 상태, 기간, 실제 지연 시간 및 각 새로 고침으로 변경된 행 수에 대한 정보가 포함된 동적 테이블의 새로 고침 기록이 표시됩니다.
또한 목표 지연 내의 시간 비율과 주어진 간격 동안 가장 긴 실제 지연 시간을 포함하는 동적 테이블의 지연 메트릭을 표시합니다.

특정 동적 테이블의 새로 고침 기록을 보려면 DYNAMIC_TABLE_REFRESH_HISTORY 테이블 함수를 사용하십시오.
예를 들어, my_db
데이터베이스 및 my_schema
스키마에 있는 모든 동적 테이블의 새로 고침 기록을 보려면 다음 문을 실행합니다.
SELECT
name,
data_timestamp,
state,
state_code,
state_message
FROM TABLE (INFORMATION_SCHEMA.DYNAMIC_TABLE_REFRESH_HISTORY (NAME_PREFIX => 'MY_DB.MY_SCHEMA')) ORDER BY data_timestamp desc;
+--------------------+---------------------+-----------+------------------------------+----------------------------------------------------------------+
| NAME | DATA_TIMESTAMP | STATE | STATE_CODE | STATE_MESSAGE |
|--------------------+---------------------+-----------+------------------------------+----------------------------------------------------------------|
| MY_DYNAMIC_TABLE_1 | 2025-04-12 09:01:36 | SKIPPED | SKIP_DUE_TO_UPSTREAM_FAILURE | Skipped refreshing because an input DT failed. |
| MY_DYNAMIC_TABLE_1 | 2025-04-12 09:00:48 | SUCCEEDED | | |
| MY_DYNAMIC_TABLE_1 | 2025-04-12 09:00:00 | FAILED | 100038 | Numeric value 'Good' is not recognized. |
| MY_DYNAMIC_TABLE_2 | 2025-04-12 09:01:36 | SUCCEEDED | | |
| MY_DYNAMIC_TABLE_2 | 2025-04-12 09:00:48 | FAILED | 091930 | SQL compilation error: Change tracking is not enabled or has |
| | | | | been missing for the time range requested on table 'MY_TABLE'. |
| MY_DYNAMIC_TABLE_2 | 2025-04-12 09:00:00 | CANCELLED | 002724 | Dynamic Table refresh job cancelled. |
+--------------------+---------------------+-----------+------------------------------+----------------------------------------------------------------+
오류가 있는 새로 고침을 필터링하려면 ERROR_ONLY => TRUE
인자를 전달합니다. 예:
SELECT
name,
data_timestamp,
state,
state_code,
state_message
FROM TABLE (INFORMATION_SCHEMA.DYNAMIC_TABLE_REFRESH_HISTORY (NAME_PREFIX => 'MY_DB.MY_SCHEMA', ERROR_ONLY => TRUE));
+--------------------+---------------------+-----------+------------------------------+----------------------------------------------------------------+
| NAME | DATA_TIMESTAMP | STATE | STATE_CODE | STATE_MESSAGE |
|--------------------+---------------------+-----------+------------------------------+----------------------------------------------------------------|
| MY_DYNAMIC_TABLE_1 | 2025-04-12 09:00:00 | FAILED | 100038 | Numeric value 'Good' is not recognized. |
| MY_DYNAMIC_TABLE_2 | 2025-04-12 09:00:48 | FAILED | 091930 | SQL compilation error: Change tracking is not enabled or has |
| | | | | been missing for the time range requested on table 'MY_TABLE'. |
| MY_DYNAMIC_TABLE_2 | 2025-04-12 09:00:00 | CANCELLED | 002724 | Dynamic Table refresh job cancelled. |
+--------------------+---------------------+-----------+------------------------------+----------------------------------------------------------------+