Snowflake 이벤트 테이블 최적화 가이드
학습 내용
이 가이드는 Klaviyo 이벤트 테이블에 대해 권장되는 Snowflake 최적화 2가지를 안내해요. 이 변경 사항은 광범위한 테이블 스캔을 줄이고, 동기화 중 Snowflake가 관련 이벤트 레코드와 시간 범위에 집중할 수 있도록 하기 위한 것이에요.
- id에 대한 동등 조회를 위해 검색 최적화를 활성화하세요. 이 기능을 사용하려면 Snowflake Enterprise Edition 이상이 필요해요.
- 이벤트 날짜별로 events 테이블을 클러스터링해 주세요. 이 기능은 모든 Snowflake 에디션에서 작동하며, Search Optimization 단계를 함께 완료할 수 있는지 여부와 관계없이 수행해야 해요.
시작하기 전에 알아야 할 것
다음 사항을 데이터 플랫폼 팀과 확인해 주세요:
- Snowflake 계정이 Enterprise Edition 이상인지 여부와 관계없이 3단계(검색 최적화)를 완료할 계획이라면 4단계의 클러스터링은 모든 Snowflake 에디션에서 작동하며, 어떤 경우든 수행해야 해요.
- 이벤트 테이블을 수정하고 테이블 수준 최적화 기능을 활성화할 권한이 있어요.
- 환경에서 Klaviyo 이벤트 테이블의 정규화된 이름을 알고 있어요.
- 이벤트 테이블에는 id 열이 포함되어 있으며, 이벤트 타임스탬프 열의 이름은 DATETIME이거나 이에 해당하는 이름을 사용해요.
- 특히 현재 과거 동기화가 실행 중이라면 테스트 기간을 미리 계획해 두세요.
이 가이드의 테이블 이름은 예시예요. <EVENTS_TABLE>을(를) 계정의 정확한 데이터베이스, 스키마, 테이블 이름으로 바꿔 주세요.
1단계: 이벤트 테이블 식별 및 검증
- 필요한 권한이 있는 역할을 사용해 Snowflake 워크시트를 여세요.
- Klaviyo 연동에서 사용하는 정확한 테이블 식별자를 확인해 주세요.
- 테이블에 예상되는 조회 및 타임스탬프 열이 포함되어 있는지 확인해 주세요.
예를 들어:
DESCRIBE TABLE <EVENTS_TABLE>; 다음 사항을 확인해 주세요:
- id는 동일성 조회에 사용되는 이벤트 식별자예요.
- DATETIME은 이벤트 타임스탬프이며, 또는 클러스터링 표현식에서 사용할 동등한 타임스탬프 열을 식별해 주세요.
2단계: 기준선 캡처(선택 사항)
변경 사항을 적용하기 전에, 이후에 결과를 비교할 수 있도록 충분한 정보를 기록해 두세요:
- 현재 동기화 상태 및 소요 시간.
- 동기화가 과거 데이터 동기화인지, 증분 동기화인지에 대한 여부예요.
- 연동에 사용되는 Snowflake 웨어하우스.
- 최근 동기화 활동에서 사용된 예상 크레딧 또는 컴퓨팅 사용량이에요.
- Snowflake Query History에서 관련 쿼리 ID, 오류 메시지 또는 타임스탬프.
과거 동기화가 비정상적으로 오래 실행되는 경우, 일시 중지하거나 다시 시작하기 전에 Klaviyo와 협의하세요.
3단계: 이벤트 ID에서 검색 최적화 활성화(선택 사항)
검색 최적화를 사용하려면 Snowflake Enterprise Edition 이상이 필요해요. 계정이 Standard 에디션을 사용 중이면 이 단계는 건너뛰고 4단계로 이동하세요 ― 클러스터링은 에디션 요구 사항이 없으며, 에디션과 관계없이 수행해야 해요.
플레이스홀더를 실제 테이블 이름으로 바꾼 다음, 아래 구문을 실행해 주세요.
ALTER TABLE <EVENTS_TABLE>
ADD SEARCH OPTIMIZATION ON EQUALITY(id); 예를 들어 테이블 이름이 klaviyo_events인 경우:
ALTER TABLE klaviyo_events
ADD SEARCH OPTIMIZATION ON EQUALITY(id); 이렇게 하면 id의 동등 조건자(equality predicate)에 대해 최적화된 액세스 경로가 생성되며, 이는 대상 조회를 위해 Snowflake가 스캔해야 하는 이벤트 테이블의 양을 줄이기 위한 것입니다.
id에 대해 검색 최적화가 이미 활성화되어 있다면 중복 구성을 생성하지 마세요. 대신 Snowflake 관리자에게 기존 구성을 확인해 주세요.
4단계: 이벤트 테이블에 날짜 기반 클러스터링을 추가하기
이벤트 타임스탬프의 날짜 부분을 기준으로 클러스터링 키를 적용해 주세요:
ALTER TABLE <EVENTS_TABLE>
CLUSTER BY (TO_DATE(DATETIME)); 예를 들어:
ALTER TABLE KLAVIYO_EVENT
CLUSTER BY (TO_DATE(DATETIME)); 1단계에서 확인한 타임스탬프 열을 사용해 주세요. 열 이름이 다르면, 표현식에서 해당 열로 대체해 주세요.
날짜 기반 클러스터링은 전체 이벤트 테이블을 스캔하는 대신 Snowflake가 관련 없는 시간 범위를 가지치기(prune)하도록 돕기 위한 기능이에요.
5단계: Snowflake 유지 관리가 완료되도록 허용
두 문이 모두 성공한 후:
- Snowflake가 검색 및 클러스터링 구조를 빌드하거나 유지 관리할 시간을 확보해 주세요.
- DDL 문을 실행한 직후 첫 번째 쿼리 결과만으로 즉시 판단하지 마세요.
- 테이블이 유지 관리되는 동안 웨어하우스 사용량과 쿼리 성능을 계속 모니터링해 주세요.
필요한 시간은 테이블 크기, 기존 데이터 레이아웃, Snowflake 워크로드에 따라 달라요.
6단계: Klaviyo에 알리기
Klaviyo에 다음 세부 정보를 보내 주세요:
- 정규화된 이벤트 테이블 이름입니다.
- 각 문이 적용된 시각.
- id에 대해 검색 최적화가 활성화되었는지에 대한 확인.
- 날짜 기반 클러스터링이 적용되었는지에 대한 확인.
- 동기화에 사용되는 Snowflake 계정/리전과 웨어하우스입니다.
- 관련 동기화 ID, 쿼리 ID 또는 오류 세부 정보.
Klaviyo는 이벤트 테이블 최적화를 최대한 활용하기 위해 내보내기 측 구성이 필요한지 여부를 확인합니다.
7단계: 제어된 검증 동기화 실행(선택 사항)
가능하다면, 큰 규모의 과거 데이터 백필을 다시 시작하기 전에 증분 동기화 또는 다른 방식의 제한된 동기화로 먼저 검증해 주세요.
새 실행 결과를 2단계의 기준선과 비교하세요:
- 처리를 시작하는 시간입니다.
- 총 동기화 시간.
- Klaviyo UI에서의 진행 동작이에요.
- Snowflake 스캔된 바이트 수.
- 소비된 웨어하우스 크레딧.
- 재시도나 반복 작업 없이 동기화가 완료되는지 여부.
가장 강력한 신호는 단일 지표만 개선되는 것이 아니라, 동기화 기간과 Snowflake 컴퓨트 모두에서 개선되는 것이에요.
8단계: 다음 동기화를 모니터링하기
단일 실행에 의존하기보다는 이후 여러 번의 동기화를 추적하세요. 다음을 확인하세요:
- 이벤트 테이블이 커질수록 컴퓨팅이 안정적이거나 감소합니다.
- 과거 데이터에 대한 광범위한 스캔이 줄어듭니다.
- 동기화 시간을 더 예측하기 쉬워요.
- 실패하거나 반복되는 쿼리가 증가하지 않습니다.
가능한 경우 변경 전후 쿼리 ID를 포함해 결과를 Klaviyo와 공유해 주세요.
문제 해결
검색 최적화 문이 실패해요.
다음을 확인해 주세요:
- Snowflake 계정이 해당 기능을 지원해요.
- 실행 역할에 테이블을 변경할 권한이 있습니다.
- 테이블 이름과 ID 열이 올바릅니다.
- 요청한 열에 대한 검색 최적화가 아직 구성되지 않았어요.
클러스터링 문이 실패해요
다음을 확인해 주세요:
- 테이블 이름이 올바릅니다.
- 타임스탬프 열이 존재하며 호환되는 타임스탬프 또는 날짜 값인지 확인해 주세요.
- 실행 역할이 테이블을 변경할 수 있어요.
- 클러스터링 표현식이 실제 이벤트 타임스탬프 필드와 일치합니다.
동기화가 여전히 느리거나 멈춘 것처럼 보여요.
Klaviyo로 보내기:
- 사용된 정확한 테이블 정의와 구문입니다.
- 각 변경 사항이 적용된 시각.
- 동기화 시작 시간과 현재 상태.
- Snowflake 쿼리 ID 및 웨어하우스 사용량.
- UI 상태가 진행되지 않는다는 증거.
첫 번째 동기화에서 개선되지 않는다는 이유만으로 최적화를 제거하지 마세요. 먼저 Snowflake가 관련 유지 관리를 완료했고 Klaviyo가 내보내기 측 구성 설정을 확인했는지 확인해 주세요.
완료 체크리스트
- 올바른 이벤트 테이블이 식별되었어요.
- id 및 이벤트 타임스탬프 열이 확인되었습니다.
- 기준 동기화 및 컴퓨팅 지표 기록됨(선택 사항).
- id에 대한 동등 조회에 검색 최적화가 활성화됨(선택 사항).
- 이벤트 날짜를 기준으로 클러스터링된 Events 테이블.
- Klaviyo에 변경 사항이 알림 처리됐어요.
- 통제된 검증 동기화가 완료되었습니다.
- 후속 동기화 성능과 컴퓨팅을 검토했는지 확인해 주세요(선택 사항).