동적 테이블 초기화 및 새로 고침 이해¶
동적 테이블의 내용은 쿼리에 의해 정의되며 기본 데이터가 변경되면 자동으로 업데이트(새로 고침 이라고 함)됩니다. 이 프로세스는 쿼리를 분석하여 테이블을 최신 상태로 유지합니다.
다음 섹션에서는 동적 테이블 새로 고침을 더 자세히 설명합니다.
섹션 |
설명 |
---|---|
동적 테이블을 생성할 때 초기화, 즉 초기 데이터 모집단을 도입합니다. 초기 새로 고침이 발생하는 시기를 지정할 수 있습니다. |
|
동적 테이블 새로 고침에 대한 개요입니다. 동적 테이블은 수동으로 새로 고치지 않는 한 예약된 일정에 따라 새로 고쳐집니다. |
|
동적 테이블은 증분 및 전체 새로 고침의 두 가지 새로 고침 모드를 지원합니다. 새로 고침 모드를 AUTO 로 설정하거나 명시적으로 설정할 수 있습니다. 새로 고침 모드를 선택하는 모범 사례와 사용된 새로 고침 모드를 보는 방법에 대해 알아보십시오. |
|
종속성과 관련하여 동적 테이블을 새로 고치는 방법을 알아볼 수 있습니다 |
|
기본 테이블 변경이 미치는 영향에 대해 알아볼 수 있습니다 |
|
동적 테이블 새로 고침에 대한 모범 사례 목록입니다. |
동적 테이블 초기화 이해하기¶
동적 테이블 을 생성하면 초기 새로 고침이 생성 시 또는 예약된 시간에 동기적으로 수행됩니다. 초기 데이터 채우기 또는 초기화 는 이 초기 새로 고침이 발생하는 시기에 따라 달라집니다.
동적 테이블은 기본 테이블 업데이트와 동적 테이블의 내용 간에 허용되는 최대 지연을 설정하는 지정된 목표 지연 을 기준으로 새로 고쳐집니다. INITIALIZE = ON_CREATE
(기본값)으로 설정하면 테이블이 즉시 초기화됩니다. INITIALIZE = ON_SCHEDULE
로 설정하면 지정된 목표 지연 시간 내에 초기화가 수행됩니다.
예를 들어, 목표 지연이 30분인 동적 테이블 DT1
을 예로 들어 보겠습니다. DT1
의 초기 데이터 채우기는 다음과 같이 발생할 수 있습니다.
DT1
이 생성 시 동기적으로 새로 고침되도록 설정된 경우(ON_CREATE
), 해당 항목은 생성 시 초기화됩니다.DT1
이 예약된 시간(ON_SCHEDULE
)에 새로 고침되도록 설정된 경우 30분 이내에 초기화됩니다.
다운스트림 종속성이 있는 시나리오에서 새로 고침 동작은 종속성에 따라 달라집니다. 예를 들어, 동적 테이블 DT1
에 다운스트림 목표 지연이 있고 DT1
에 종속된 DT2
의 목표 지연이 30분인 경우 DT1
은 DT2
가 새로 고쳐질 때만 새로 고쳐집니다.
DT1
의 경우:
생성 시 동기식으로 새로 고침하도록 설정하면 즉시 초기화됩니다. 초기화에 실패하면 생성 프로세스가 중지되어 오류에 대한 즉각적인 피드백이 제공됩니다.
예약된 시간에 새로 고침하도록 설정된 경우 초기화는
DT2
새로 고침 시점에 따라 달라집니다.
검색되는 데이터의 양에 따라 초기화하는 데 다소 시간이 걸릴 수 있습니다. 진행 상황을 추적하려면 동적 테이블 생성 문제 해결 섹션을 참조하십시오.
수동 및 예약 새로 고침 옵션 이해하기¶
동적 테이블은 목표 지연 에 의해 결정된 예약에 따라 새로 고쳐집니다. 동적 테이블을 읽을 때마다 데이터 새로 고침은 목표 지연으로 정의된 기간 내에 수행됩니다.
ALTER DYNAMIC TABLE … REFRESH 명령 또는 Snowsight 를 사용하여 동적 테이블을 수동으로 새로 고쳐 최신 데이터를 가져올 수 있습니다. 자세한 내용은 동적 테이블 수동 새로 고침 섹션을 참조하십시오.
동적 테이블 새로 고침 시간 제한은 새로 고침이 자동으로 취소되기 전에 계정 또는 웨어하우스 수준에서 허용되는 최대 기간을 설정하는 STATEMENT_TIMEOUT_IN_SECONDS 매개 변수에 의해 제어됩니다.
목표 지연이 예약된 새로 고침에 미치는 영향¶
목표 지연은 예약된 새로 고침 빈도를 제어합니다. 새로 고침을 수동으로 관리하려면 동적 테이블의 목표 지연을 DOWNSTREAM 으로 설정하고 모든 다운스트림 동적 테이블도 DOWNSTREAM 으로 설정되어 있는지 확인합니다.
전체 방향성 비순환 그래프(DAG)의 목표 지연을 DOWNSTREAM 으로 설정하면 최종 동적 테이블이 새로 고침 일정을 제어하므로 예약된 새로 고침이 기본적으로 비활성화됩니다. 시간 기반 목표 지연이 있는 동적 테이블이 없는 경우 예약된 새로 고침을 위해 파이프라인이 일시 중단됩니다. 이 경우 가장 다운스트림에 있는 테이블을 수동으로 새로 고치면 업스트림 종속성이 자동으로 새로 고쳐집니다.
목표 지연을 DOWNSTREAM 으로 설정해도 정확한 시간이 지정되지 않습니다. 대신 Snowflake는 새로 고침 케이던스를 선택하여 지연을 대상 값 이하로 유지하려고 시도합니다. 예를 들어, 목표 지연이 4시간인 동적 테이블은 3.5시간마다 새로 고쳐질 수 있습니다.
해결 방법으로 CRON 예약이 있는 작업을 사용할 수 있습니다. 예:
CREATE TASK my_task
SCHEDULE = 'USING CRON <expr> <time_zone>'
AS
ALTER DYNAMIC TABLE my_dynamic_table REFRESH;
동적 테이블 새로 고침 모드¶
동적 테이블은 증분 및 전체 새로 고침의 두 가지 새로 고침 모드를 지원합니다. 새로 고침 모드를 AUTO 로 설정하거나 명시적으로 설정할 수 있습니다.
AUTO 새로 고침 모드:
AUTO
매개 변수를 사용하면 Snowflake는 쿼리 복잡성, 지원되는 구조체, 연산자, 함수 및 예상 성능을 기준으로 가장 비용 및 시간 효율이 높은 새로 고침 모드를 자동으로 선택합니다. 증분 새로 고침이 지원되지 않거나 성능이 저하될 가능성이 있는 경우 Snowflake는 대신 전체 새로 고침을 자동으로 선택합니다.증분 새로 고침 모드: 이 모드는 동적 테이블의 쿼리를 분석하여 마지막 새로 고침 이후의 변경 사항을 계산합니다. 그런 다음 이러한 변경 사항을 테이블에 병합합니다.
전체 새로 고침 모드: 이 모드는 동적 테이블의 쿼리를 실행하고 이전에 구체화된 결과를 완전히 대체합니다.
동적 테이블을 만든 후 테이블을 모니터링하여 증분 또는 전체 새로 고침이 해당 테이블을 업데이트하는 데 사용되는지 여부를 결정 할 수 있습니다.
동적 테이블 새로 고침 모드 선택 모범 사례¶
동적 테이블 성능에 가장 적합한 모드는 데이터 변경량과 쿼리 복잡성에 따라 달라집니다. 또한 전용 웨어하우스에서 다양한 새로 고침 모드를 테스트하면 비용을 분리하고 실제 워크로드에 따라 성능 튜닝을 개선하는 데 도움이 됩니다.
AUTO 새로 고침 모드: 시스템은 기본적으로 증분 새로 고침을 적용하려고 시도합니다. 증분 새로 고침이 지원되지 않거나 성능이 좋지 않을 수 있는 경우 동적 테이블이 자동으로 전체 새로 고침을 대신 선택합니다.
대부분의 사용 사례에 대해서는
AUTO
를 사용하는 것이 좋으며, 이를 통해 수동 튜닝 없이도 새로 고침 동작을 최적화할 수 있습니다. 일관된 동작을 위해 모든 프로덕션 테이블에서 새로 고침 모드를 명시적으로 설정하십시오.AUTO
동작은 Snowflake 릴리스 간에 변경될 수 있으며, 프로덕션 파이프라인에서 사용할 경우 예기치 않은 성능 변화를 일으킬 수 있습니다.
증분식 새로 고침: 마지막 새로 고침 이후의 변경 사항만 동적 테이블에 업데이트하므로, 작은 업데이트가 자주 발생하는 대규모 데이터 세트에 적합합니다.
증분 새로 고침과 호환되는 쿼리(예: 결정론적 함수, 단순 조인,
SELECT
,WHERE
,GROUP BY
의 기본 식)에 가장 적합합니다. 지원되지 않는 기능이 있고 새로 고침 모드가 증분으로 설정된 경우 Snowflake는 동적 테이블을 생성하지 못합니다.증분식 새로 고침으로 성능을 최적화하기 위한 핵심 방법은 변경 볼륨을 소스 데이터의 약 5%로 제한하고 처리 오버헤드를 줄이기 위해 그룹화 키별로 데이터를 클러스터링하는 것입니다.
여러 조인에서의 집계와 같은 특정 작업 조합은 효율적으로 실행되지 않을 수 있습니다.
전체 새로 고침: 전체 데이터 세트를 다시 처리하고 동적 테이블을 전체 쿼리 결과로 업데이트합니다. 복잡한 쿼리나 중요한 데이터 변경으로 전체 업데이트가 필요할 때 사용합니다.
복잡한 쿼리, 비결정적 함수 또는 데이터의 주요 변경으로 인해 증분 새로 고침이 지원되지 않는 경우에 유용합니다.
사용 사례에 가장 적합한 모드를 결정하려면 자동 권장 사항과 구체적인 새로 고침 모드(전체 및 증분)를 실험해 보십시오.
중요
증분 새로 고침 모드의 동적 테이블은 전체 새로 고침 모드의 동적 테이블에서 다운스트림할 수 없습니다. 증분 새로 고침 모드는 업스트림 전체 새로 고침 테이블의 각 새로 고침 중에 발생하는 전체 행 변경과 호환되지 않기 때문입니다.
동적 테이블의 새로 고침 모드를 확인하려면 동적 테이블 새로 고침 모드 보기 섹션을 참조하십시오.
동적 테이블 새로 고침 모드 보기¶
동적 테이블을 생성 할 때 새로 고침 모드 를 설정합니다. 생성 후 다음 방법 중 하나를 사용하여 동적 테이블이 증분 또는 전체 새로 고침을 사용하는지 확인할 수 있으며, 필요한 권한 이 있는 역할을 사용하여 확인할 수 있습니다.
SHOW DYNAMIC TABLES 명령을 실행합니다.
SHOW DYNAMIC TABLES;
출력 에서:
text
열에는 사용자가 지정한 새로 고침 모드가 표시됩니다.refresh_mode
열에는 실제 새로 고침 모드가 표시됩니다.refresh_mode_reason
에서 실제 새로 고침 모드가 선택된 이유를 확인할 수 있습니다.
탐색 메뉴에서 Monitoring » Dynamic Tables 을 선택한 다음 동적 테이블을 선택합니다.
페이지 상단의 오브젝트 헤더에서 동적 테이블의 새로 고침 모드를 볼 수 있습니다. 전체 새로 고침의 경우 모드 위로 마우스를 가져가면 새로 고침 모드 사유가 표시됩니다.
동적 테이블이 다른 동적 테이블에 종속된 경우 데이터가 새로 고쳐지는 방법¶
동적 테이블의 지연을 시간 측정값으로 설정하면 자동 새로 고침 프로세스가 목표 지연 시간을 가장 잘 충족하도록 새로 고침을 예약합니다.
한 동적 테이블이 다른 동적 테이블에 종속된 경우에 데이터 일관성을 유지하기 위해, 프로세스에서는 호환 가능한 시간에 계정의 모든 동적 테이블을 새로 고칩니다. 덜 자주 새로 고치는 타이밍이 더 자주 새로 고치는 타이밍과 일치합니다. 새로 고침이 너무 오래 걸리면 스케줄러가 최신 상태를 유지하기 위해 새로 고침을 건너뛸 수 있습니다. 하지만 스냅샷 격리는 유지됩니다.
예를 들어, 동적 테이블 DT1
의 목표 지연이 2분이고 목표 지연이 1분인 동적 테이블 DT2
를 쿼리한다고 가정합니다. 이 프로세스는 DT1
을 96초마다 새로 고치고 DT2
를 48초마다 새로 고쳐야 한다고 결정할 수 있습니다. 결과적으로, 프로세스에서 다음 일정을 적용할 수 있습니다.
특정 시점 |
새로 고친 동적 테이블 |
---|---|
2022-12-01 00:00:00 |
DT1, DT2 |
2022-12-01 00:00:48 |
DT2 |
2022-12-01 00:01:36 |
DT1, DT2 |
2022-12-01 00:02:24 |
DT2 |
이는 주어진 시간에 서로 종속된 일련의 동적 테이블을 쿼리할 때 이들 테이블 전체에서 데이터의 동일한 “스냅샷”을 쿼리하고 있다는 의미입니다.
동적 테이블의 목표 지연 시간은 이 테이블이 종속된 동적 테이블의 목표 지연 시간보다 짧을 수 없습니다. 예를 들어 다음과 같이 가정합니다.
DT1
은 동적 테이블DT2
및DT3
를 쿼리합니다.DT2
의 목표 지연 시간은 5분입니다.DT3
의 목표 지연 시간은 1분입니다.
즉, DT1
의 목표 지연 시간은 5분보다 짧아서는 안 됩니다(즉, DT2
및 DT3
의 지연 시간 중 더 긴 시간보다 짧아서는 안 됩니다).
DT1
의 지연을 5분으로 설정하면 프로세스에서 이러한 목표에 따라 새로 고침 예약을 설정합니다.
DT3
를 자주 새로 고쳐 지연 시간을 1분 미만으로 유지하십시오.DT1
및DT2
를 함께 새로고침하고 지연 시간을 5분 미만으로 유지할 수 있을 만큼 자주 새로 고치십시오.DT1
및DT2
의 새로 고침이DT3
의 새로 고침과 일치하는지 확인하여 스냅샷 격리를 보장합니다.
중요
증분 새로 고침 모드의 동적 테이블은 전체 새로 고침 모드의 동적 테이블에서 다운스트림할 수 없습니다. 증분 새로 고침 모드는 업스트림 전체 새로 고침 테이블의 각 새로 고침 중에 발생하는 전체 행 변경과 호환되지 않기 때문입니다.
기본 테이블의 열 변경 사항의 영향 이해하기¶
동적 테이블과 연결된 기본 오브젝트가 변경되면 다음 동작이 적용됩니다.
변경 |
영향 |
---|---|
|
없습니다. 기본 테이블에 새 열이 추가되거나 사용되지 않은 열이 삭제되면 아무런 작업도 이루어지지 않고 이전과 같이 새로 고침이 계속됩니다. |
|
재초기화: 재생성 후 첫 번째 새로 고침은 초기화 입니다. |
|
향후 동적 테이블의 새로 고침은 실패합니다. 변경 사항에 대응하려면 동적 테이블을 다시 만들어야 합니다. |
동적 테이블 새로 고침의 모범 사례¶
새로 고침을 위한 전용 웨어하우스 사용¶
동적 테이블에는 새로 고침을 수행하기 위해 가상 웨어하우스가 필요합니다. 동적 테이블 파이프라인과 관련된 비용을 명확하게 파악하려면 전용 웨어하우스를 사용하여 동적 테이블에 특화된 가상 웨어하우스 사용량을 격리하도록 동적 테이블을 테스트해야 합니다.
자세한 내용은 동적 테이블의 비용 이해하기 섹션을 참조하십시오.
다운스트림 지연 사용¶
다운스트림 지연은 다른 종속 동적 테이블을 새로 고쳐야 할 때 동적 테이블도 새로 고쳐야 함을 나타냅니다. 다운스트림 지연은 사용 편의성과 비용 효율성 측면에서 모범 사례로 사용하는 것이 좋습니다. 다운스트림 지연을 사용하지 않는 경우, 복잡한 동적 테이블 체인을 관리하려면 최종 테이블의 데이터 최신성만 모니터링하는 대신 각 테이블에 개별적으로 목표 지연을 할당하고 관련 제약 조건을 관리해야 합니다.
자세한 내용은 동적 테이블 목표 지연 이해하기 섹션을 참조하십시오.