동적 테이블에 대한 이벤트 테이블 모니터링 및 경고

이 도움말 항목에서는 새로 고침 상태에 대한 정보를 제공하는 이벤트 테이블을 쿼리하는 방법과 이벤트 테이블의 새로운 데이터에 대한 경고를 설정하는 방법에 대해 설명합니다.

이벤트 테이블을 쿼리하여 새로 고침 모니터링하기

동적 테이블이 새로 고쳐질 때 새로 고침 작업 상태에 대한 정보를 제공하는 이벤트를 기록하도록 Snowflake를 구성할 수 있습니다. 이벤트는 동적 테이블과 연결된 활성 이벤트 테이블 에 기록됩니다.

예를 들어, 이벤트 테이블을 데이터베이스에 연결 했다고 가정해 보겠습니다. 해당 데이터베이스의 동적 테이블이 새로 고쳐지면 Snowflake는 해당 이벤트 테이블에 이벤트를 기록합니다.

이 활성 이벤트 테이블에 기록된 이벤트를 쿼리하여 동적 테이블 새로 고침을 모니터링할 수 있습니다.

예를 들어, 데이터베이스 my_db 에 있는 동적 테이블의 타임스탬프, 동적 테이블 이름, 쿼리 ID 및 오류 메시지를 가져오려면 다음을 수행합니다.

SELECT
    timestamp,
    resource_attributes:"snow.executable.name"::VARCHAR AS dt_name,
    resource_attributes:"snow.query.id"::VARCHAR AS query_id,
    value:message::VARCHAR AS error
  FROM my_event_table
  WHERE
    resource_attributes:"snow.executable.type" = 'DYNAMIC_TABLE' AND
    resource_attributes:"snow.database.name" = 'MY_DB' AND
    value:state = 'FAILED'
  ORDER BY timestamp DESC;
Copy
+-------------------------+------------------+--------------------------------------+---------------------------------------------------------------------------------+
| TIMESTAMP               | DT_NAME          | QUERY_ID                             | ERROR                                                                           |
|-------------------------+------------------+--------------------------------------+---------------------------------------------------------------------------------|
| 2025-02-17 21:40:45.444 | MY_DYNAMIC_TABLE | 01ba7614-0107-e56c-0000-a995024f304a | SQL compilation error:                                                          |
|                         |                  |                                      | Failure during expansion of view 'MY_DYNAMIC_TABLE': SQL compilation error:     |
|                         |                  |                                      | Object 'MY_DB.MY_SCHEMA.MY_BASE_TABLE' does not exist or not authorized.        |
+-------------------------+------------------+--------------------------------------+---------------------------------------------------------------------------------+

다음 예제는 my_schema 스키마에서 동적 테이블을 사용하여 업스트림 오류에 대한 모든 열을 검색합니다.

SELECT *
  FROM my_event_table
  WHERE
    resource_attributes:"snow.executable.type" = 'DYNAMIC_TABLE' AND
    resource_attributes:"snow.schema.name" = 'MY_SCHEMA' AND
    value:state = 'UPSTREAM_FAILURE'
  ORDER BY timestamp DESC;
Copy
+-------------------------+-----------------+-------------------------+-------+----------+-------------------------------------------------+-------+------------------+-------------+-----------------------------+-------------------+-------------------------------+-----------+
| TIMESTAMP               | START_TIMESTAMP | OBSERVED_TIMESTAMP      | TRACE | RESOURCE | RESOURCE_ATTRIBUTES                             | SCOPE | SCOPE_ATTRIBUTES | RECORD_TYPE | RECORD                      | RECORD_ATTRIBUTES | VALUE                         | EXEMPLARS |
|-------------------------+-----------------+-------------------------+-------+----------+-------------------------------------------------+-------+------------------+-------------+-----------------------------+-------------------+-------------------------------+-----------|
| 2025-02-17 21:40:45.486 | NULL            | 2025-02-17 21:40:45.486 | NULL  | NULL     | {                                               | NULL  | NULL             | EVENT       | {                           | NULL              | {                             | NULL      |
|                         |                 |                         |       |          |   "snow.database.id": 49,                       |       |                  |             |   "name": "refresh.status", |                   |   "state": "UPSTREAM_FAILURE" |           |
|                         |                 |                         |       |          |   "snow.database.name": "MY_DB",                |       |                  |             |   "severity_text": "WARN"   |                   | }                             |           |
|                         |                 |                         |       |          |   "snow.executable.id": 487426,                 |       |                  |             | }                           |                   |                               |           |
|                         |                 |                         |       |          |   "snow.executable.name": "MY_DYNAMIC_TABLE_2", |       |                  |             |                             |                   |                               |           |
|                         |                 |                         |       |          |   "snow.executable.type": "DYNAMIC_TABLE",      |       |                  |             |                             |                   |                               |           |
|                         |                 |                         |       |          |   "snow.owner.id": 2601,                        |       |                  |             |                             |                   |                               |           |
|                         |                 |                         |       |          |   "snow.owner.name": "DATA_ADMIN",              |       |                  |             |                             |                   |                               |           |
|                         |                 |                         |       |          |   "snow.owner.type": "ROLE",                    |       |                  |             |                             |                   |                               |           |
|                         |                 |                         |       |          |   "snow.schema.id": 411,                        |       |                  |             |                             |                   |                               |           |
|                         |                 |                         |       |          |   "snow.schema.name": "MY_SCHEMA"               |       |                  |             |                             |                   |                               |           |
|                         |                 |                         |       |          | }                                               |       |                  |             |                             |                   |                               |           |
+-------------------------+-----------------+-------------------------+-------+----------+-------------------------------------------------+-------+------------------+-------------+-----------------------------+-------------------+-------------------------------+-----------+

이벤트 테이블을 쿼리하는 데 필요한 역할과 결과를 필터링하는 데 사용할 수 있는 조건에 대한 자세한 내용은 새로운 데이터에 대한 경고 설정하기 섹션을 참조하십시오.

새로 고침을 모니터링하기 위해 새로운 데이터에 대한 경고를 설정합니다

앞서 언급했듯이, 동적 테이블이 새로 고쳐지면 이벤트 테이블에 새로 고침 성공 또는 실패 여부를 나타내는 이벤트가 기록됩니다. 새로운 데이터에 경고 를 설정하여 이벤트 테이블을 모니터링할 수 있습니다. 새로 고침에 실패하면 알림을 보내도록 경고를 구성할 수 있습니다.

다음 섹션에서는 이벤트를 캡처하기 위해 이벤트 로그를 설정하는 방법, 경고를 설정하는 방법, 이벤트 테이블에 기록된 이벤트를 해석하는 방법에 대해 설명합니다.

참고

동적 테이블에 대한 이벤트 로깅에는 비용이 발생합니다. 원격 분석 데이터 수집 비용 섹션을 참조하십시오.

캡처할 이벤트의 심각도 수준을 설정합니다

참고

심각도 수준을 설정하지 않으면 이벤트가 캡처되지 않습니다.

이벤트 테이블에 기록할 동적 테이블 이벤트를 설정하려면 이벤트 테이블에 캡처할 이벤트의 심각도 수준을 설정 하십시오. 이벤트는 다음 수준에서 캡처됩니다.

  • ERROR: 새로 고침 실패 이벤트.

  • WARN: 업스트림 동적 테이블 새로 고침 실패 및 새로 고침 실패 이벤트.

  • INFO: 새로 고침 이벤트 성공, 업스트림 동적 테이블 새로 고침 실패 및 새로 고침 실패 이벤트.

레벨을 설정하려면 계정 또는 오브젝트에 대해 LOG_LEVEL 매개 변수를 설정합니다. 다음에 대한 수준을 설정할 수 있습니다.

  • 계정의 모든 오브젝트.

  • 데이터베이스 또는 스키마의 모든 오브젝트.

  • 특정 동적 테이블.

예:

  • 계정의 모든 오브젝트에 대한 ERROR 레벨 이벤트 및 메시지를 캡처하려면 ALTER ACCOUNT SET LOG_LEVEL 를 실행합니다.

    ALTER ACCOUNT SET LOG_LEVEL = ERROR;
    
    Copy

    이 수준은 UDFs, 저장 프로시저, 동적 테이블 및 작업을 포함하여 계정의 모든 유형의 오브젝트에 영향을 줍니다.

  • my_db 데이터베이스의 모든 오브젝트에 대한 INFO 레벨 이벤트 및 메시지를 캡처하려면 ALTER DATABASE … SET LOG_LEVEL 을 실행합니다.

    ALTER DATABASE my_db SET LOG_LEVEL = INFO;
    
    Copy

    계정에서 수준을 설정하는 경우와 마찬가지로 데이터베이스에서 수준을 설정하면 UDFs, 저장 프로시저, 동적 테이블 및 작업을 포함한 데이터베이스의 모든 유형의 오브젝트에 영향을 줍니다.

  • 동적 테이블 my_dynamic_table 에 대한 WARN 레벨 이벤트를 캡처하려면 ALTER DYNAMIC TABLE … SET LOG_LEVEL 을 실행합니다.

    ALTER DYNAMIC TABLE my_dynamic_table SET LOG_LEVEL = WARN;
    
    Copy

새로운 데이터에 대한 경고 설정하기

이벤트 로깅에 대한 심각도 수준을 설정한 후에는 새로운 데이터에 대한 경고를 설정하여 동적 테이블 새로 고침의 실패를 나타내는 새 이벤트가 있는지 이벤트 테이블을 모니터링할 수 있습니다. 이벤트 테이블에 새 행이 삽입되고 경고에 지정된 조건을 충족하면 새로운 데이터에 대한 경고가 트리거됩니다.

참고

새 데이터에 대한 경고를 만들려면 이벤트 테이블을 쿼리하는 데 필요한 권한이 부여된 역할을 사용해야 합니다.

경고 조건에서 동적 테이블 이벤트를 쿼리하려면 resource_attributes:"snow.executable.type" = 'DYNAMIC_TABLE' 에서 행을 선택합니다. 이벤트 목록의 범위를 좁히려면 다음 열을 필터링하면 됩니다.

  • 결과를 특정 데이터베이스의 동적 테이블로 제한하려면 resource_attributes:"snow.database.name" 을 사용합니다.

  • 동적 테이블의 오류로 인해 새로 고침이 실패한 이벤트를 반환하려면 value:state = 'FAILED' 를 사용합니다.

  • 업스트림 동적 테이블의 오류로 인해 새로 고침이 실패한 이벤트를 반환하려면 value:state = 'UPSTREAM_FAILURE' 를 사용합니다.

동적 테이블 이벤트에 대해 기록된 값에 대한 자세한 내용은 동적 테이블 이벤트에 대해 기록된 정보 섹션을 참조하십시오.

예를 들어, 다음 문은 my_db 데이터베이스의 동적 테이블에 대해 새로 고침이 실패할 때 작업을 수행하는 새로운 데이터에 대한 경고를 생성합니다. 이 예제에서는 다음을 가정합니다.

CREATE ALERT my_alert_on_dt_refreshes
  IF( EXISTS(
    SELECT * FROM SNOWFLAKE.TELEMETRY.EVENT_TABLE
      WHERE resource_attributes:"snow.executable.type" = 'dynamic_table'
        AND resource_attributes:"snow.database.name" = 'my_db'
        AND record_attributes:"event.name" = 'refresh.status'
        AND record:"severity_text" = 'ERROR'
        AND value:"state" = 'FAILED'))
  THEN
    BEGIN
      LET result_str VARCHAR;
      (SELECT ARRAY_TO_STRING(ARRAY_ARG(name)::ARRAY, ',') INTO :result_str
         FROM (
           SELECT resource_attributes:"snow.executable.name"::VARCHAR name
             FROM TABLE(RESULT_SCAN(SNOWFLAKE.ALERT.GET_CONDITION_QUERY_UUID()))
             LIMIT 10
         )
      );
      CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
        SNOWFLAKE.NOTIFICATION.TEXT_PLAIN(:result_str),
        '{"my_slack_integration": {}}'
      );
    END;
Copy

동적 테이블 이벤트에 대해 기록된 정보

동적 테이블이 새로 고쳐지면 이벤트가 이벤트 테이블에 기록됩니다. 다음 섹션에서는 이벤트를 나타내는 이벤트 테이블 행에 대해 설명합니다.

이벤트 테이블 열 값

동적 테이블이 새로 고쳐지면 다음 값을 가진 행이 이벤트 테이블에 삽입됩니다.

참고

열이 아래에 목록에 없는 경우 해당 이벤트의 열 값은 NULL 입니다.

데이터 타입

설명

timestamp

TIMESTAMP_NTZ

이벤트가 생성된 UTC 타임스탬프입니다.

observed_timestamp

TIMESTAMP_NTZ

로그에 사용되는 UTC 시간입니다. 현재 이 값은 timestamp 열에 있는 값과 동일합니다.

resource_attributes

OBJECT

새로 고친 동적 테이블을 식별하는 특성.

record_type

STRING

이벤트 유형, 이는 동적 테이블 새로 고침의 EVENT 입니다.

record

OBJECT

동적 테이블 새로 고침 상태에 대한 자세한 내용.

value

VARIANT

동적 테이블 새로 고침의 상태 및 새로 고침이 실패한 경우 실패에 대한 오류 메시지를 표시합니다.

resource_attributes 열의 키-값 페어

resource_attributes 열에는 다음 키-값 페어와 함께 OBJECT 값이 포함됩니다.

속성 이름

특성 유형

설명

snow.database.id

INTEGER

동적 테이블이 포함된 데이터베이스의 내부/시스템 생성 식별자입니다.

12345

snow.database.name

VARCHAR

동적 테이블이 포함된 데이터베이스의 이름입니다.

MY_DATABASE

snow.executable.id

INTEGER

새로 고쳐진 동적 테이블의 내부/시스템 생성 식별자입니다.

12345

snow.executable.name

VARCHAR

새로 고친 동적 테이블의 이름입니다.

MY_DYNAMIC_TABLE

snow.executable.type

VARCHAR

오브젝트의 유형입니다. 동적 테이블 이벤트의 경우 값은 DYNAMIC_TABLE 입니다.

DYNAMIC_TABLE

snow.owner.id

INTEGER

동적 테이블에서 OWNERSHIP 권한이 있는 역할의 내부/시스템 생성 식별자입니다.

12345

snow.owner.name

VARCHAR

동적 테이블에서 OWNERSHIP 권한이 있는 역할의 이름입니다.

MY_ROLE

snow.owner.type

VARCHAR

오브젝트를 소유하는 역할 유형(예: ROLE)입니다. . Snowflake Native App 이 오브젝트를 소유한 경우 값은 APPLICATION 입니다. . 삭제된 오브젝트에 소유자 역할이 없으므로 오브젝트를 삭제하는 경우 Snowflake는 NULL을 반환합니다.

ROLE

snow.query.id

VARCHAR

동적 테이블을 새로 고친 쿼리의 ID 입니다.

01ba7614-0107-e56c-0000-a995024f304a

snow.schema.id

INTEGER

동적 테이블을 포함하는 스키마의 내부/시스템 생성 식별자입니다.

12345

snow.schema.name

VARCHAR

동적 테이블이 포함된 스키마의 이름입니다.

MY_SCHEMA

snow.warehouse.id

INTEGER

동적 테이블을 새로 고치는 데 사용되는 웨어하우스의 내부/시스템 생성 식별자입니다.

12345

snow.warehouse.name

VARCHAR

동적 테이블을 새로 고치는 데 사용되는 웨어하우스의 이름입니다.

MY_WAREHOUSE

record 열의 키-값 페어

record 열에는 다음 키-값 페어와 함께 OBJECT 값이 포함됩니다.

타입

설명

name

VARCHAR

이벤트 이름입니다. 동적 테이블 새로 고침의 경우 값은 refresh_status 입니다.

refresh_status

severity_text

VARCHAR

이벤트의 심각도 수준(다음 값 중 하나)입니다.

  • INFO: 새로 고침이 성공했습니다.

  • ERROR: 새로 고침에 실패했습니다.

  • WARN: 업스트림 동적 테이블 새로 고침이 실패했습니다.

INFO

value 열의 키-값 페어

value 열에는 다음 키-값 페어와 함께 VARIANT 값이 포함됩니다.

타입

설명

state

VARCHAR

새로 고침 상태(다음 값 중 하나일 수 있음)입니다.

  • SUCCEEDED: 새로 고침이 성공했습니다.

  • ERROR: 새로 고침에 실패했습니다.

  • UPSTREAM_FAILURE: 이 동적 테이블이 종속된 동적 테이블을 새로 고치지 못했기 때문에 새로 고치지 못했습니다.

SUCCEEDED

message

VARCHAR

state 의 값이 ERROR 인 경우 이 열에는 오류 메시지가 포함됩니다.

SQL compilation error:\nFailure during expansion of view 'MY_DYNAMIC_TABLE': SQL compilation error:\nObject 'MY_DB.MY_SCHEMA.MY_BASE_TABLE' does not exist or not authorized.