Snowpipe
Snowpipe
Snowpipe는 파일이 스테이지에 도착하자마자 데이터를 로드할 수 있게 해줘요. 즉, 큰 배치를 일정에 맞춰 수동으로 COPY 문을 실행하는 대신, 마이크로 배치 단위로 파일에서 데이터를 로드해 수 분 안에 사용자가 쓸 수 있게 해줘요.
출처: Documentation
본문
Snowpipe는 어떻게 동작하나요?
Snowpipe는 파일이 스테이지에 도착하자마자 데이터를 로드해요. 데이터는 참조된 파이프(pipe)에 정의된 COPY 문에 따라 로드돼요.
파이프는 Snowpipe가 사용하는 COPY 문을 포함하는 이름이 있는 일급(first-class) Snowflake 객체예요. COPY 문은 데이터 파일의 원본 위치(즉, 스테이지)와 대상 테이블을 식별해요. JSON, Avro 같은 반정형 데이터 유형을 포함한 모든 데이터 유형이 지원돼요.
스테이징된 파일을 감지하는 방법은 여러 가지가 있어요.
클라우드 메시징으로 Snowpipe 자동화
자동 데이터 로드는 클라우드 스토리지의 이벤트 알림을 활용해 Snowpipe에 로드할 새 데이터 파일의 도착을 알려줘요. Snowpipe는 큐의 이벤트 알림을 폴링해요. 큐의 메타데이터를 사용해 Snowpipe는 지정된 파이프 객체에 정의된 매개 변수에 따라 새 데이터 파일을 연속적이고 서버리스 방식으로 대상 테이블에 로드해요.
Snowpipe REST 엔드포인트 호출
클라이언트 애플리케이션이 파이프 객체의 이름과 데이터 파일 이름 목록을 사용해 공용 REST 엔드포인트를 호출해요. 목록과 일치하는 새 데이터 파일이 파이프 객체가 참조하는 스테이지에서 발견되면 로드 대기열에 들어가요. Snowflake가 제공하는 컴퓨팅 리소스가 파이프에 정의된 매개 변수에 따라 큐의 데이터를 Snowflake 테이블에 로드해요.
지원되는 클라우드 스토리지 서비스
다음 표는 각 클라우드 플랫폼에 호스팅된 Snowflake 계정에서 자동 Snowpipe와 Snowpipe REST API 호출에 대해 지원되는 클라우드 스토리지 서비스를 보여줘요.
| Snowflake 계정 호스트 | Amazon S3 | Google Cloud Storage | Microsoft Azure Blob Storage | Microsoft Data Lake Storage Gen2 | Microsoft Azure General-purpose v2 |
|---|---|---|---|---|---|
| Amazon Web Services | ✔ | ✔ | ✔ | ✔ | ✔ |
| Google Cloud | ✔ | ✔ | ✔ | ✔ | ✔ |
| Microsoft Azure | ✔ | ✔ | ✔ | ✔ | ✔ |
자세한 내용은 클라우드 메시징으로 연속 데이터 로드 자동화와 데이터 로드를 위한 Snowpipe REST 엔드포인트 개요를 참고해요.
클라우드 제공업체의 정부 리전은 다른 상용 리전으로 또는 다른 상용 리전에서 이벤트 알림을 보내는 것을 허용하지 않아요. 자세한 내용은 AWS GovCloud(US)와 Azure Government를 참고해요.
중요 — Snowflake는 비용, 이벤트 노이즈, 지연 시간을 줄이기 위해 Snowpipe용 클라우드 이벤트 필터링을 활성화할 것을 권장해요. 각 클라우드 제공업체의 이벤트 필터링 구성에 대한 자세한 내용은 다음 페이지를 참고해요.
Snowpipe는 대량 데이터 로드와 어떻게 다른가요?
이 섹션은 Snowpipe와 COPY 명령을 사용한 대량 데이터 로드 워크플로의 주요 차이점을 간략히 설명해요. 추가 세부 내용은 Snowpipe 문서 전체에 걸쳐 제공돼요.
인증
- 대량 데이터 로드: 클라이언트가 지원하는 보안 옵션에 의존해 사용자 세션을 인증하고 시작해요.
- Snowpipe: REST 엔드포인트를 호출할 때는 JWT(JSON Web Token)와 함께 키 페어 인증이 필요해요. JWT는 RSA 암호화를 사용하는 공개/개인 키 페어로 서명돼요.
로드 기록
- 대량 데이터 로드: 대상 테이블의 메타데이터에 64일 동안 저장돼요. COPY 문이 완료되면 문 출력으로 사용할 수 있어요.
- Snowpipe: 파이프의 메타데이터에 14일 동안 저장돼요. REST 엔드포인트, SQL 테이블 함수, 또는 ACCOUNT_USAGE 뷰를 통해 Snowflake에서 요청해야 해요.
중요 — 파일을 다시 로드해(데이터를 중복해) 발생하는 문제를 피하려면, 특정 파일 묶음의 데이터를 로드할 때 대량 데이터 로드와 Snowpipe 중 하나만 사용하는 것을 권장해요.
트랜잭션
- 대량 데이터 로드: 로드는 항상 단일 트랜잭션으로 수행돼요. 데이터는 사용자가 수동으로 제출한 다른 SQL 문과 함께 테이블에 삽입돼요.
- Snowpipe: 각 데이터 파일의 행 수와 크기에 따라 로드가 단일 또는 여러 트랜잭션으로 결합되거나 분할돼요. 부분적으로 로드된 파일의 행(ON_ERROR 복사 옵션 설정 기준)도 하나 이상의 트랜잭션으로 결합되거나 분할될 수 있어요.
컴퓨팅 리소스
- 대량 데이터 로드: COPY 문을 실행하려면 사용자가 지정한 웨어하우스가 필요해요.
- Snowpipe: Snowflake가 제공하는 컴퓨팅 리소스를 사용해요.
비용
- 대량 데이터 로드: 각 가상 웨어하우스가 활성화된 시간만큼 청구돼요.
- Snowpipe: 파일을 로드하는 동안 Snowpipe 웨어하우스에서 사용된 컴퓨팅 리소스에 따라 청구돼요.
권장 로드 파일 크기
Snowpipe로 가장 효율적이고 비용 효과적인 로드 환경을 만들려면 파일 크기 모범 사례의 파일 크기 권장 사항을 따르고 파일을 1분에 한 번 스테이징하는 것을 권장해요. 이 접근 방식은 보통 비용(즉, Snowpipe 큐 관리와 실제 로드에 소요되는 리소스)과 성능(즉, 로드 지연 시간) 사이의 좋은 균형을 이뤄요. 자세한 내용은 연속 데이터 로드 — 즉 Snowpipe — 와 파일 크기를 참고해요.
데이터 파일의 로드 순서
각 파이프 객체에 대해 Snowflake는 로드 대기 중인 데이터 파일을 순서대로 나열하는 단일 큐를 만드는데요. 스테이지에서 새 데이터 파일이 발견되면 Snowpipe는 그것을 큐에 추가해요. 그러나 여러 프로세스가 큐에서 파일을 가져가므로, Snowpipe는 일반적으로 오래된 파일을 먼저 로드하지만 파일이 스테이징된 순서와 동일한 순서로 로드된다는 보장은 없어요.
데이터 중복 방지
Snowpipe는 각 파이프 객체와 연결된 파일 로드 메타데이터를 사용해 같은 파일(그리고 데이터)이 테이블에서 다시 로드되지 않도록 해요. 이 메타데이터는 로드된 각 파일의 경로(즉, 접두사)와 이름을 저장하며, 나중에 수정된(즉, 다른 eTag를 가진) 같은 이름의 파일도 로드되지 않도록 해요.
Snowpipe 지연 시간 추정
Snowpipe 로드를 구별할 수 있는 요인이 많기 때문에 Snowflake가 지연 시간을 추정하는 것은 매우 어려워요. 파일 형식과 크기, 그리고 COPY 문의 복잡성(변환용 SELECT 문 포함)이 모두 Snowpipe 로드에 필요한 시간에 영향을 미쳐요.
일반적인 로드 집합을 수행해 평균 지연 시간을 추정해 보는 것을 권장해요.
파이프 보안
액세스 제어 권한
파이프 만들기
파이프를 만들고 관리하려면 최소한 다음 권한이 있는 역할이 필요해요.
| 객체 | 권한 | 비고 |
|---|---|---|
| 데이터베이스 | USAGE | |
| 스키마 | USAGE, CREATE PIPE | |
| 파이프 정의의 스테이지 | USAGE | 외부 스테이지만 해당 |
| 파이프 정의의 스테이지 | READ | 내부 스테이지만 해당 |
| 파이프 정의의 테이블 | SELECT, INSERT |
파이프 소유
파이프가 생성된 후 파이프 소유자(즉, 파이프에 OWNERSHIP 권한이 있는 역할)는 다음 권한을 가져야 해요.
| 객체 | 권한 | 비고 |
|---|---|---|
| 데이터베이스 | USAGE | |
| 스키마 | USAGE | |
| 파이프 | OWNERSHIP | |
| 파이프 정의의 스테이지 | USAGE | 외부 스테이지만 해당 |
| 파이프 정의의 스테이지 | READ | 내부 스테이지만 해당 |
| 파이프 정의의 테이블 | SELECT, INSERT |
파이프 일시 중지 또는 재개
파이프 소유자 외에도 다음 최소 권한이 있는 역할이 파이프를 일시 중지하거나 재개할 수 있어요.
| 객체 | 권한 | 비고 |
|---|---|---|
| 데이터베이스 | USAGE | |
| 스키마 | USAGE | |
| 파이프 | OPERATE | |
| 파이프 정의의 스테이지 | USAGE | 외부 스테이지만 해당 |
| 파이프 정의의 스테이지 | READ | 내부 스테이지만 해당 |
| 파이프 정의의 테이블 | SELECT, INSERT |
Snowpipe DDL
파이프를 만들고 관리하려면 Snowflake는 다음과 같은 특수 DDL 명령 집합을 제공해요.
또한 프로바이더는 다음 표준 액세스 제어 DDL을 사용해 Snowpipe에 필요한 데이터베이스 객체에 대한 액세스를 보고, 부여하거나, 취소할 수 있어요.