다이나믹 테이블의 target lag 설정하기
다이나믹 테이블의 target lag 설정하기
Target lag는 리프레시 간격이 아니라 갱신(staleness)의 목표입니다. TARGET_LAG = '10 minutes'는 데이터가 10분 이내의 나이여야 한다는 뜻이지, 10분마다 리프레시하라는 뜻이 아니에요.
CREATE OR REPLACE DYNAMIC TABLE dt_orders
TARGET_LAG = '10 minutes' -- 데이터는 최대 10분까지 stale해도 됨
WAREHOUSE = transform_wh
REFRESH_MODE = INCREMENTAL
AS
SELECT ... FROM raw_orders ...;
전체 dt_orders 정의는 Create a dynamic table을 참고하세요.
Target lag는 best-effort이며 보장이 아닙니다: Snowflake는 target을 맞추기 위해 리프레시를 적극적으로 스케줄링하지만, 웨어하우스 크기, 데이터 양, 쿼리 복잡도, 파이프라인 깊이가 처리량을 제약하면 실제 lag가 target을 초과할 수 있어요. 애플리케이션은 데이터가 항상 target lag 안에 있다고 가정하면 안 됩니다. 실제 lag를 모니터링하고 target을 초과하는 경우를 처리하세요. 실제 lag가 target을 초과하는지 감지하려면 Monitor dynamic tables을 참고하세요.
출처: Snowflake 문서
본문
Snowflake가 target lag를 사용하는 방식
Snowflake는 휴리스틱을 사용해 target lag를 맞추려면 언제 리프레시를 시작해야 하는지 결정합니다. 다음 리프레시가 정상적으로 시작될 시점에 아직 리프레시가 실행 중이면, Snowflake는 같은 테이블의 동시 리프레시를 시작하는 대신 그것이 끝날 때까지 기다려요. 리프레시가 target lag보다 일관되게 더 오래 걸리면 실제 갱신 정도가 target을 초과합니다.
최소 target lag는 60초입니다. 이보다 작은 값은 검증에 실패해요. 기존 다이나믹 테이블의 target lag를 바꾸려면 ALTER DYNAMIC TABLE <name> SET TARGET_LAG = '<duration>'을 실행하세요.
다중 테이블 파이프라인에서의 target lag
여러 다이나믹 테이블이 파이프라인을 이루면 Snowflake는 각 테이블이 의존성 순서로(상위 테이블 먼저) 데이터를 처리하도록 리프레시를 조정합니다. 상위 테이블의 데이터가 마지막 리프레시 이후 변경되지 않았다면, Snowflake는 그에 의존하는 하위 테이블의 리프레시를 건너뛸 수 있어요. 단일 파이프라인 리프레시 주기 안에서 Snowflake는 모든 테이블 간에 스냅샷 일관성을 유지하므로, 모든 하위 테이블이 입력의 단일하고 일관된 시점(point-in-time) 뷰를 읽습니다. 스냅샷 격리가 어떻게 동작하는지, 그리고 전체 조정이 필요 없을 때 파이프라인을 분리하는 방법은 Data consistency and pipeline boundaries를 참고하세요.
TARGET_LAG = DOWNSTREAM 설정하기
TARGET_LAG은 두 가지 형태를 받습니다: 기간 문자열('10 minutes') 또는 키워드 DOWNSTREAM이에요.
DOWNSTREAM (파라미터) vs. downstream (방향):
TARGET_LAG = DOWNSTREAM은 "자체 스케줄로 리프레시하지 말고, Snowflake가 하위 소비자가 신선한 데이터를 필요로 한다고 판단할 때만 리프레시하라"는 뜻의 스케줄링 파라미터입니다. 산문에서 "downstream"이라는 단어는 "이 테이블에 의존하는 다이나믹 테이블"을 뜻해요. 파라미터는 방향에서 이름을 따왔습니다. 이 테이블의 리프레시 스케줄을 하위 소비자로부터 파생하라고 Snowflake에 지시하는 거예요.
TARGET_LAG = DOWNSTREAM으로 설정하면 다이나믹 테이블은 독립적인 리프레시 스케줄이 없습니다. 하위 다이나믹 테이블(이 테이블을 읽는 테이블)이 리프레시를 트리거할 때만 리프레시해요. Snowflake는 모든 하위 소비자 중 가장 짧은 target lag를 사용해 타이밍을 결정합니다. 이 모드를 설정하려면 ALTER DYNAMIC TABLE <name> SET TARGET_LAG = DOWNSTREAM을 실행하세요.
DOWNSTREAM을 사용해 여러 파이프라인을 조정하는 예시는 Synchronize multiple pipelines with a controller table을 참고하세요.
TARGET_LAG = DOWNSTREAM인 다이나믹 테이블에 하위 소비자가 없으면 자동으로 리프레시되지 않으며, Snowflake는 이에 대한 경고도 만들지 않아요.
참고:
DYNAMIC_TABLE_REFRESH_BOUNDARY()를 통해 이 테이블을 참조하는 하위 다이나믹 테이블은 소프트 의존성(soft dependency)을 만듭니다. 소프트 의존성은 스케줄링 목적상 하위 소비자로 간주되지 않아요. 하위 소비자가 리프레시 경계만 사용한다면,TARGET_LAG = DOWNSTREAM인 테이블은 자동으로 리프레시되지 않습니다.
두 테이블 파이프라인에서의 target lag
dt_orders_daily가 dt_orders를 읽는 두 다이나믹 테이블을 생각해보세요:
| dt_orders | dt_orders_daily | 동작 |
|---|---|---|
| TARGET_LAG = DOWNSTREAM | TARGET_LAG = '10 minutes' | 권장. dt_orders_daily는 10분 신선도 안에 머물도록 리프레시. dt_orders는 dt_orders_daily가 필요할 때마다 주문형으로 리프레시 |
| TARGET_LAG = '5 minutes' | TARGET_LAG = '10 minutes' | dt_orders_daily는 최대 5분 stale한 dt_orders 데이터를 사용해 10분 안에 리프레시 |
| TARGET_LAG = '10 minutes' | TARGET_LAG = DOWNSTREAM | 피해야 함. dt_orders는 10분마다 리프레시하지만 dt_orders_daily는 하위 소비자가 없어 리프레시되지 않음. dt_orders_daily에 대한 쿼리는 stale하거나 빈 데이터를 반환 |
| TARGET_LAG = DOWNSTREAM | TARGET_LAG = DOWNSTREAM | 어느 테이블도 자동 리프레시되지 않음. 둘 다 존재하지 않는 하위 소비자를 기다림. 수동 리프레시로 파이프라인을 트리거해야 함 |
| TARGET_LAG = '1 hour' | TARGET_LAG = '10 minutes' | 유효하지 않음. 하위 테이블은 상위 소스보다 신선할 수 없음. Snowflake가 에러를 발생 |
Target lag는 파이프라인의 뿌리에 있는 base table을 기준으로 측정되며, 직접적인 상위 다이나믹 테이블을 기준으로 하지 않아요. 다이나믹 테이블에 연결된 테이블 그래프를 보려면 View the pipeline graph in Snowsight을 참고하세요.
다이나믹 테이블 수동 리프레시
다음 예정된 검사(check)를 기다리지 않고 즉시 리프레시를 트리거할 수 있어요. 개발 중이거나, 일회성 리프레시가 필요하거나, target lag가 길어서 지금 데이터가 필요할 때 유용합니다. 수동 리프레시를 트리거하려면 ALTER DYNAMIC TABLE <name> REFRESH를 실행하세요.
예정된 리프레시에 의존하는 하위 소비자가 있는 다이나믹 테이블에서는 잦은 수동 리프레시를 피하세요. 수동 리프레시는 Snowflake가 예정된 검사를 건너뛰게 만들어 하위 테이블을 지연시킬 수 있어요.
SCHEDULER = DISABLE vs. SUSPEND
예정된 리프레시를 중단하는 방법은 두 가지로 구분됩니다: SUSPEND(구성을 보존하는 일시 중단)와 SCHEDULER = DISABLE(스케줄링에서 영구 제거)이에요. 자세한 문법, 예시, 선택 안내는 SCHEDULER = DISABLE vs. SUSPEND를 참고하세요.
더 알아보기 (Learn more)
- Optimize queries for incremental refresh — 워크로드에 맞는 target lag 최적화
- Monitor dynamic tables — 다이나믹 테이블이 target lag를 맞추는지 모니터링
- Dynamic table refresh modes — 리프레시 모드가 target lag 동작에 미치는 영향
- Understanding costs for dynamic tables — target lag 관련 비용 관리