동적 테이블의 기본 키 이해하기¶
Snowflake는 동적 테이블과 동적 Iceberg 테이블에서 기본 키를 사용하여 행 수준 변경 사항을 더 효율적으로 추적하고 전체 새로 고침 동적 테이블의 증분 새로 고침 다운스트림을 활성화할 수 있습니다. Snowflake는 변경 내용 추적 열을 사용하는 대신 기본 키를 안정적인 행 식별자로 사용하여 새로 고침 간의 최소 변경 세트를 계산합니다.
이는 다음과 같은 시나리오에서 특히 유용합니다.
기본 테이블이 제자리에서 업데이트되는 대신 INSERT OVERWRITE를 통해 주기적으로 재작성되므로, Snowflake는 버전 간에 변경된 사항을 감지하지 못합니다.
파이프라인은 행 계보 앞에 오는 외부 관리 Apache Iceberg™ v2 테이블에서 읽습니다.
일부 동적 테이블은 지원되지 않는 증분 구문으로 인해 전체 새로 고침 모드를 사용해야 하지만, 다운스트림 테이블은 증분 처리의 이점을 누릴 수 있습니다.
동적 테이블의 기본 키 유형¶
Snowflake는 동적 테이블에 대한 두 가지 유형의 기본 키 사용 사례를 지원합니다. 1) 행 수준 변경 내용 추적 및 2) 동적 테이블 자체에 대한 고유 키 파생.
기본 키 행 수준 계보 기반 변경 내용 추적¶
기본 테이블에 RELY 속성 세트가 있는 기본 키 제약 조건이 있는 경우, Snowflake는 다운스트림 동적 테이블에서 행 수준 변경 내용을 추적하기 위해 해당 키를 사용합니다. 이는 기본 테이블이 INSERT OVERWRITE를 통해 주기적으로 재작성되는 경우 특히 유용하며, 일반적으로 테이블 버전 전체에서 변경 내용 추적을 방지합니다.
Snowflake는 신뢰할 수 있는 기본 키를 통해 내부 변경 내용 추적 열을 사용하는 대신 기본 키 값을 비교하여 새로 고침 간에 변경된 행을 식별합니다. 이를 통해 기본 데이터가 완전히 교체된 경우에도 증분 처리가 가능합니다.
기본 테이블 기본 키에 RELY 속성을 설정하려면 다음을 실행합니다.
고유 키 파생¶
Snowflake는 동적 테이블의 쿼리 정의에서 신뢰할 수 있는 고유 키를 자동으로 파생할 수 있습니다. 예를 들어, 다음 SQL 구문은 파생된 고유 키를 생성합니다.
GROUP BY: 각 그룹은 정확히 하나의 출력 행을 생성하므로 그룹화 열은 고유 키를 형성합니다.
QUALIFY ROW_NUMBER() = 1: 필터가 파티션당 정확히 하나의 행을 유지하므로 파티션 기준 열은 고유 키를 형성합니다.
신뢰할 수 있는 기본 테이블 기본 키: 기본 테이블의 기본 키는 동적 테이블의 고유 키로 사용됩니다.
Snowflake는 파생된 기본 키를 동적 테이블에 고유한 제약 조건으로 등록합니다. 이러한 제약 조건은 쿼리 구조에서 비롯되므로 추가 유효성 검사 없이도 완전히 신뢰할 수 있습니다.
동적 테이블에 파생된 기본 키가 있는지 확인하려면 다음을 실행합니다.
기본 키를 사용해야 하는 경우¶
기본 키는 다음 시나리오에서 유용합니다.
- INSERT OVERWRITE 워크로드의 변경 내용 추적 개선
INSERT OVERWRITE를 통해 기본 테이블을 주기적으로 재작성하는 경우, Snowflake는 표준 변경 내용 추적 열을 사용하여 변경 사항을 감지할 수 없습니다. 기본 키를 사용하면 Snowflake가 키 값으로 행을 비교하고 실제 변경 사항만 처리하여 동적 테이블을 전체적으로 다시 계산하지 않도록 방지할 수 있습니다.
- 전체 새로 고침 동적 테이블의 증분 새로 고침 다운스트림 활성화
일반적으로 증분 새로 고침 모드의 동적 테이블은 전체 새로 고침 모드의 동적 테이블의 다운스트림일 수 없습니다. 업스트림 전체 새로 고침 동적 테이블에 시스템에서 파생된 고유 키가 있는 경우, Snowflake는 전체 새로 고침 간의 변경 사항을 계산하여 다운스트림 테이블을 증분식으로 새로 고칠 수 있습니다. 이를 통해 증분 파이프라인에 대한 주요 차단이 제거됩니다.
- 파이프라인에서 변경 전파 감소
기본 키를 사용하면 파이프라인의 각 스테이지에서 값 기반 변경을 줄일 수 있습니다. Snowflake는 기본 키가 값이 동일한 이전 버전과 새 버전 모두에 존재하는 행을 필터링하여 다운스트림 테이블에 전파되는 변경 사항의 양을 줄일 수 있습니다.
주요 동작¶
다운스트림 증분 새로 고침 옵트인: 파생된 고유 키가 있는 전체 새로 고침 동적 테이블에서 읽는 동적 테이블에서 증분 새로 고침을 사용하려면 다운스트림 테이블에
REFRESH_MODE = INCREMENTAL을 명시적으로 설정해야 합니다.REFRESH_MODE = AUTO를 설정하면 계속 FULL로 해석됩니다.기본 키 기반 변경 내용 추적 지원 확인:
SHOW UNIQUE KEYS IN <dt_name>을 사용하여 동적 테이블에 파생된 고유 키가 있는지 확인합니다. 또는REFRESH_MODE = INCREMENTAL을 사용하여 다운스트림 동적 테이블을 생성하고 생성 성공 여부를 확인합니다.마스킹 정책: 기본 키 열을 난독화하는 마스킹 정책으로 인해 Snowflake는 변경 내용 추적에 해당 키를 사용하지 못합니다. 이 경우 Snowflake는 표준 변경 내용 추적 열로 대체됩니다.
다음 단계¶
예제와 구현 지침은 기본 키를 사용하여 동적 테이블 파이프라인 최적화 섹션을 참조하세요.
CREATE DYNAMIC TABLE의 전체 구문은 CREATE DYNAMIC TABLE 섹션을 참조하세요.