Apache Iceberg™ 테이블 자동 새로 고침¶
외부에서 관리되는 신규 또는 기존 Apache Iceberg™ 테이블 에 대한 자동 메타데이터 새로 고침을 구성합니다. Snowflake는 자동 새로 고침을 통해 서버리스 방식으로 지속적으로 외부 Iceberg 카탈로그를 폴링하여 메타데이터를 가장 최근의 원격 변경 사항과 동기화합니다.
Iceberg 테이블의 자동 새로 고침은 클라우드 공급자 알림에 의존하지 않기 때문에 디렉터리 테이블 또는 외부 테이블의 자동 새로 고침과 다르게 작동합니다. 대신, 다음 단계에 따라 기능을 구성합니다.
- :ref:`카탈로그 통합에서 새로 고침 간격을 설정<label-tables_iceberg_auto_refresh_configure_cat_int>`합니다. Snowflake는 다음 외부 Iceberg 카탈로그 옵션에 대해 자동 새로 고침을 지원합니다. - Apache Iceberg REST OpenAPI 사양을 준수하는 REST 카탈로그 
- Snowflake Open Catalog 
- 오브젝트 저장소(Delta Lake만 해당) 
- AWS Glue 
 
- :ref:`카탈로그 통합을 사용하는 하나 이상의 Iceberg 테이블을 생성<label-tables_iceberg_auto_refresh_create_table>`합니다. 
- :ref:`AUTO_REFRESH 매개 변수<label-tables_iceberg_auto_refresh_update>를 사용하여 각 테이블에 대한 자동 새로 고침을 제어`합니다. 
이 접근 방식을 사용하면 카탈로그 통합을 통해 새로 고침 설정을 중앙에서 관리하면서 필요에 따라 개별 테이블을 제어할 수 있습니다.
카탈로그 통합에서 새로 고침 간격 설정¶
CREATE CATALOG INTEGRATION 명령을 실행할 때 REFRESH_INTERVAL_SECONDS 매개 변수의 값을 지정할 수 있습니다. 그렇지 않은 경우 기본 새로 고침 간격은 30초입니다. Snowflake는 카탈로그 통합으로 정의된 Iceberg 테이블이 있는 경우에만 외부 카탈로그를 폴링합니다.
다음 예제에서는 새로 고침 간격을 60초로 지정하여 AWS Glue에 대한 카탈로그 통합을 생성합니다.
CREATE CATALOG INTEGRATION auto_refresh_catalog_integration
  CATALOG_SOURCE = GLUE
  CATALOG_NAMESPACE = 'my_catalog_namespace'
  TABLE_FORMAT = ICEBERG
  GLUE_AWS_ROLE_ARN = 'arn:aws:iam::123456789123:role/my-catalog-role'
  GLUE_CATALOG_ID = '123456789123'
  ENABLED = TRUE
  REFRESH_INTERVAL_SECONDS = 60;
카탈로그 통합의 새로 고침 간격을 업데이트하려면 ALTER CATALOG INTEGRATION 명령을 사용합니다.
예:
ALTER CATALOG INTEGRATION auto_refresh_catalog_integration SET REFRESH_INTERVAL_SECONDS = 120;
자동 새로 고침 기능이 있는 Iceberg 테이블 만들기¶
CREATE ICEBERG TABLE 명령을 사용하여 Iceberg 테이블을 생성합니다. 테이블에 자동 메타데이터 새로 고침을 사용하도록 지정하려면 AUTO_REFRESH = TRUE 를 설정합니다.
다음 예제는 앞서 생성한 카탈로그 통합(auto_refresh_catalog_integration)과 AWS Glue의 CATALOG_TABLE_NAME 를 지정하여 AWS Glue를 카탈로그로 사용하는 Iceberg 테이블을 생성하는 예제입니다.
CREATE OR REPLACE ICEBERG TABLE auto_refresh_iceberg_table
  CATALOG_TABLE_NAME = 'myGlueTable'
  CATALOG = 'auto_refresh_catalog_integration'
  AUTO_REFRESH = TRUE;
자동 새로 고침 활성화 또는 취소¶
참고
- 테이블이 Snowflake 버전 8.22 이전에 생성된 카탈로그 통합을 사용하는 경우 테이블에서 자동 새로 고침을 활성화하기 전에 ALTER CATALOG INTEGRATION 명령을 사용하여 - REFRESH_INTERVAL_SECONDS매개 변수를 설정해야 합니다.
- Iceberg 테이블의 자동 새로 고침을 자주 켜고 끄면 테이블의 메타데이터 새로 고침이 느려질 수 있습니다. 
ALTER ICEBERG TABLE 명령을 사용하여 기존 Iceberg 테이블에 대한 자동 새로 고침을 활성화하거나 해제할 수 있습니다.
예:
ALTER ICEBERG TABLE my_iceberg_table SET AUTO_REFRESH = FALSE;
자동 새로 고침 상태 모니터링¶
SHOW ICEBERG TABLES¶
여러 테이블의 자동 새로 고침 상태를 확인하려면 SHOW ICEBERG TABLES 명령을 사용합니다.
SHOW ICEBERG TABLES;
명령 출력에는 액세스 권한이 있는 각 테이블에 대해 SYSTEM$AUTO_REFRESH_STATUS 함수와 동일한 정보를 표시하는 auto_refresh_status 라는 열이 포함됩니다.
SYSTEM$AUTO_REFRESH_STATUS¶
특정 테이블의 자동 새로 고침 상태를 검색하려면 SYSTEM$AUTO_REFRESH_STATUS 함수를 호출하십시오.
SELECT SYSTEM$AUTO_REFRESH_STATUS('my_iceberg_table');
이 함수는 Snowflake가 테이블의 새로 고침을 자동화하는 데 사용하는 파이프에 대한 세부 정보(예: 스냅샷 큐의 실행 상태 및 크기)를 반환합니다. 실행 상태가 RUNNING 이면 자동 새로 고침이 예상대로 실행되고 있음을 나타냅니다. 자세한 내용은 SYSTEM$AUTO_REFRESH_STATUS 섹션을 참조하십시오.
ICEBERG_TABLE_SNAPSHOT_REFRESH_HISTORY¶
특정 테이블의 가장 최근 새로 고침 기록에 대한 메타데이터 및 스냅샷 정보를 검색하려면 ICEBERG_TABLE_SNAPSHOT_REFRESH_HISTORY 함수를 사용하십시오.
SELECT *
FROM TABLE(INFORMATION_SCHEMA.ICEBERG_TABLE_SNAPSHOT_REFRESH_HISTORY(
  TABLE_NAME => 'my_iceberg_table'
));
자동 새로 고침 이벤트 모니터링¶
Iceberg 테이블의 자동 새로 고침 상태에 대한 정보를 제공하는 이벤트를 기록하도록 Snowflake를 구성할 수 있습니다. Snowflake는 :doc:`활성 이벤트 테이블</developer-guide/logging-tracing/event-table-setting-up>`에 이벤트를 기록합니다. 예를 들어, 데이터베이스와 연결된 이벤트 테이블이 있다고 가정해 보겠습니다. Snowflake가 해당 데이터베이스의 Iceberg 테이블을 자동으로 새로 고치면 Snowflake는 이벤트를 이벤트 테이블에 기록합니다.
자동 새로 고침 이벤트를 모니터링하면 다음 영역에 대한 인사이트를 얻는 데 도움이 될 수 있습니다.
- 자동 새로 고침 진행률: 자동 새로 고침 프로세스를 통해 스냅샷이 이동하는 방식을 추적합니다. 
- 집계 통계: 자동화된 새로 고침 작업에 대한 요약된 통계를 검토합니다. 
다음과 같은 중요한 조건에 대한 경고를 구성할 수도 있습니다.
- 새로 고침 오류 
- 높은 새로 고침 대기 시간 
참고
자동 새로 고침을 위한 이벤트 로깅에는 비용이 발생합니다. 자세한 내용은 원격 분석 데이터 수집 비용 섹션을 참조하십시오.
Snowflake는 자동 새로 고침이 시작되거나 완료되거나 오류가 발생할 때 이벤트를 기록합니다.
이벤트를 캡처하기 위한 심각도 수준 설정¶
자동 새로 고침 이벤트를 캡처하려면 Iceberg 테이블 수준 또는 계정 수준에서 LOG_LEVEL 매개 변수를 설정해야 합니다. :ref:`LOG_LEVEL<label-log_level>`은 다음 값에 따라 캡처할 이벤트를 결정합니다.
- ERROR: 해결하기 위해 사람의 개입이 필요한 변경 사항을 나타내는 이벤트입니다. 
- WARN: 사람의 개입 없이 해결할 수 있는 문제를 나타내는 이벤트입니다. 
- DEBUG: 대량 이벤트입니다. 
참고
기본 심각도 수준은 없습니다. 이벤트를 캡처하려면 계정 수준 또는 Iceberg 테이블 수준에서 심각도 수준을 설정해야 합니다.
예를 들어, 특정 Iceberg 테이블에 대해 DEBUG 수준 자동 새로 고침 이벤트를 캡처하려면 다음 명령을 사용합니다.
ALTER ICEBERG TABLE <my_table_name> SET LOG_LEVEL = DEBUG;
자세한 내용은 로깅, 메트릭 및 추적을 위한 수준 설정하기 섹션을 참조하십시오.
자동 새로 고침 이벤트에 대해 이벤트 테이블 쿼리¶
자동 새로 고침 이벤트를 쿼리하려면 먼저 이벤트 테이블을 설정하고 :ref:`이벤트 캡처에 대한 심각도 수준을 설정<label-tables_iceberg_set_severity_level_events>`해야 합니다.
다음 예에서는 스냅샷 처리 중에 생성되는 Iceberg 자동 새로 고침 이벤트를 검색하는 방법을 보여줍니다.
SELECT record_type,
       record:"name" event_name,
       record:"severity_text" log_level,
       resource_attributes:"snow.database.name" database_name,
       resource_attributes:"snow.schema.name" schema_name,
       resource_attributes:"snow.table.name" table_name,
       resource_attributes:"snow.catalog.integration.name" catalog_integration_name,
       record_attributes:"snow.snapshot.id" snapshot_id,
       parse_json(value):metadata_file_location metadata_file_location,
       parse_json(value):snapshot_state snapshot_state
  FROM my_active_event_table
  WHERE record_type='EVENT' AND event_name='iceberg_auto_refresh_snapshot_lifecycle';
출력:
+-------------+-----------------------------------------+-----------+---------------+-------------+------------+--------------------------+---------------+------------------------+----------------+
| RECORD_TYPE | EVENT_NAME                              | LOG_LEVEL | DATABASE_NAME | SCHEMA_NAME | TABLE_NAME | CATALOG_INTEGRATION_NAME | SNAPSHOT_ID   | METADATA_FILE_LOCATION | SNAPSHOT_STATE |
+-------------+-----------------------------------------+-----------+---------------+-------------+------------+--------------------------+---------------+------------------------+----------------+
| EVENT       | iceberg_auto_refresh_snapshot_lifecycle | DEBUG     | TESTDB        | TESTSH      | TESTTABLE  | glue_integration         | 4281775564368 | metadata.json          | started        |
| EVENT       | iceberg_auto_refresh_snapshot_lifecycle | DEBUG     | TESTDB        | TESTSH      | TESTTABLE  | glue_integration         | 4281775564368 | metadata.json          | completed      |
+-------------+-----------------------------------------+-----------+---------------+-------------+------------+--------------------------+---------------+------------------------+----------------+
오류 복구¶
자동 새로 고침 프로세스 중에 오류가 발생하면 Snowflake는 실행 상태를 다음 값 중 하나로 업데이트합니다.
- STALLED는 Snowflake가 오류를 복구하려고 시도 중임을 의미합니다. 복구에 성공하면 자동 새로 고침 프로세스가 예상대로 계속 실행되고 실행 상태가 정상- RUNNING상태로 다시 전환됩니다.
- STOPPED는 자동 새로 고침 프로세스에서 복구할 수 없는 오류가 발생하여 테이블에 대한 자동 새로 고침이 중지되었음을 의미합니다.- 예를 들어 Snowflake가 대상 스냅샷과 현재 스냅샷 사이에 직접적인 계보를 설정할 수 없는 경우 복구할 수 없는 오류가 발생할 수 있습니다. - STOPPED상태에서 복구하려면 다음 작업을 수행합니다.- 테이블에서 자동 새로 고침을 끕니다. 
- 수동으로 메타데이터 새로 고침을 수행합니다. 자세한 지침은 테이블 메타데이터 새로 고침 섹션을 참조하십시오. 
- ALTER ICEBERG TABLE … SET AUTO_REFRESH 문을 사용하여 자동 새로 고침을 다시 활성화합니다. 
- SYSTEM$AUTO_REFRESH_STATUS 함수를 호출하여 자동 새로 고침이 - RUNNING상태인지 확인합니다. 함수를 여러 번 호출하여 큐에 대기 중인 스냅샷 수(- pendingSnapshotCount)가 점차 줄어드는 것을 확인할 수도 있습니다.
 
청구¶
Snowflake는 Snowpipe를 사용하여 Iceberg 테이블을 자동으로 새로 고치므로 자동 새로 고침에 대한 요금은 Snowpipe에서 청구하는 요금과 동일한 청구서 항목에 표시됩니다. 자동 새로 고침을 모니터링하는 이벤트<label-tables_iceberg_auto_refresh_events>`를 사용해도 비용이 발생합니다. 자세한 내용은 :doc:/developer-guide/logging-tracing/logging-tracing-billing` 섹션을 참조하세요.
이 기능에는 Snowpipe 파일 요금이 부과되지 않습니다.
pipe_name 열에 Iceberg 테이블 이름이 표시되는 Account Usage PIPE_USAGE_HISTORY 뷰 를 확인하여 발생한 요금을 추정할 수 있습니다.
Delta 기반 Iceberg 테이블의 경우 자동 새로 고침 파이프는 NULL 파이프 이름을 표시합니다.
Iceberg 테이블 요금에 대한 자세한 내용은 Iceberg 테이블 청구 섹션을 참조하십시오.
고려 사항 및 제한 사항¶
자동 새로 고침을 사용하는 Iceberg 테이블로 작업하는 경우 다음 사항을 고려합니다.
- Snowflake 버전 8.22(또는 Delta 기반 테이블의 경우 9.2) 이전에 생성된 카탈로그 통합의 경우 해당 카탈로그 통합에 종속된 테이블에서 자동 새로 고침을 사용하려면 - REFRESH_INTERVAL_SECONDS매개 변수를 수동으로 설정해야 합니다. 자세한 지침은 ALTER CATALOG INTEGRATION … SET AUTO_REFRESH 섹션을 참조하십시오.
- 오브젝트 스토리지용 카탈로그 통합 의 경우, 자동 새로 고침은 - TABLE_FORMAT = DELTA와의 통합에서만 지원됩니다.
- 업데이트가 빈번한 테이블의 경우 폴링 간격( - REFRESH_INTERVAL_SECONDS)을 짧게 사용하면 성능이 저하될 수 있습니다.