Snowpipe Streaming: 고성능 아키텍처

Snowpipe Streaming을 위한 고성능 아키텍처는 실시간에 가까운 인사이트가 요구되는 현대적이고 데이터 집약적인 조직을 위해 설계되었습니다. 이 차세대 아키텍처는 실시간 수집을 위한 처리량, 효율성, 유연성을 크게 향상시킨 Snowflake입니다.

클래식 아키텍처에 대한 자세한 내용은 Snowpipe Streaming - 클래식 아키텍처 섹션을 참조하십시오. 클래식 SDK 와 고성능 SDK 의 차이점은 클래식 SDK 와 고성능SDK 비교 을 참조하십시오.

주요 기능

  • 처리량 및 지연 시간:

    • 높은 처리량: 테이블당 최대 10 GB/초의 수집 속도를 지원하도록 설계되었습니다.

    • 실시간에 가까운 인사이트: 5~10초 이내에 엔드투엔드 수집에서 쿼리까지의 대기 시간을 달성합니다.

  • 청구:

  • 유연한 수집:

    • Java SDK: 클라이언트 측 성능을 개선하고 리소스 사용량을 줄이기 위해 새로운 snowpipe-streaming SDK, Rust 기반 클라이언트 코어를 활용합니다.

    • REST API: 직접 수집 경로를 제공하여 경량 워크로드, IoT 디바이스 데이터, 엣지 배포를 위한 통합을 간소화합니다.

  • 데이터 처리 최적화:

    • 실시간 변환: PIPE 오브젝트 내에서 COPY 명령 구문을 사용하여 수집 중 데이터 정리 및 재형성을 지원합니다.

    • 채널 표시 여부 개선: 주로 Snowsight의 채널 기록 뷰와 새로운 GET_CHANNEL_STATUS API 를 통해 수집 상태에 대한 인사이트가 향상되었습니다.

이 아키텍처는 다음과 같은 경우에 권장됩니다.

  • 대용량 스트림 워크로드의 일관된 수집.

  • 실시간 분석 및 대시보드를 통해 시간에 민감한 의사결정을 지원합니다.

  • IoT 디바이스 및 엣지 배포에서 데이터의 효율적인 통합.

  • 스트림 수집을 위해 투명하고 예측 가능한 처리량 기반 가격을 원하는 조직.

새로운 개념: PIPE 오브젝트

이 아키텍처는 채널 및 오프셋 토큰과 같은 핵심 개념을 Snowpipe Streaming Classic에서 계승하면서 PIPE 오브젝트를 중심 구성 요소로 도입합니다.

PIPE 오브젝트는 수집된 모든 스트림 데이터의 진입점 및 정의 계층 역할을 하는 명명된 Snowflake 오브젝트입니다. 다음을 제공합니다.

  • 데이터 처리 정의: 변환 또는 스키마 매핑을 위한 서버 측 버퍼링을 포함하여 스트림 데이터가 대상 테이블에 커밋되기 전에 처리되는 방식을 정의합니다.

  • 변환 활성화: COPY 명령 변환 구문을 통합하여 기내에서 데이터를 조작(예: 필터링, 열 재정렬, 간단한 식)할 수 있습니다.

  • 테이블 기능 지원: 정의된 클러스터링 키, DEFAULT 값 열, AUTOINCREMENT (또는 IDENTITY) 열이 있는 테이블에 대한 수집을 처리합니다.

  • 스키마 관리: 수신 스트림 데이터의 예상 스키마와 대상 테이블 열에 대한 매핑을 정의하여 서버 측 스키마 유효성 검사를 가능하게 합니다.

Snowpipe Streaming Classic과의 차이점

기존 아키텍처에 익숙한 사용자를 위해 고성능 아키텍처는 다음과 같은 변경 사항을 도입합니다.

  • 신규 SDK 및 APIs: 새로운 snowpipe-streaming SDK (Java SDK 및 REST API)가 필요하므로 마이그레이션을 위한 클라이언트 코드 업데이트가 필요합니다.

  • PIPE 오브젝트 요구 사항: 모든 데이터 수집, 구성(예: 변환), 스키마 정의는 서버 측 PIPE 오브젝트를 통해 관리되며, 이는 클래식의 클라이언트 중심 구성에서 벗어난 것입니다.

  • 채널 연결: 클라이언트 애플리케이션은 대상 테이블에 대해 직접 채널을 열지 않고 특정 PIPE 오브젝트에 대해 채널을 엽니다.

  • 스키마 유효성 검사: 주로 클라이언트 측(Classic SDK)에서 PIPE 오브젝트를 기반으로 하는 Snowflake에 의한 서버 측 적용으로 이동합니다.

  • 마이그레이션 요구 사항: 새 SDK 에 대한 클라이언트 애플리케이션 코드를 수정하고 Snowflake에서 PIPE오브젝트를 정의해야 합니다.

제한 사항 및 고려 사항

  • Snowpipe ON_ERROR 옵션: STREAMING Snowpipe ON_ERROR 옵션은 CONTINUE 만 지원합니다.

  • 지원되는 아키텍처(Rust Core): Arm64 Mac, Windows, Arm64-linux 및 X86_64-linux.

  • Linux 요구 사항: Linux에서 SDK 를 사용하는 경우 시스템에 glibc 라이브러리 버전 2.18 이상이 설치되어 있어야 합니다.

  • 배포 환경: AWS 배포만 지원됩니다.

  • 비공개 링크: PrivateLink 는 지원되지 않습니다.

  • 클러스터링된 테이블(수집): 클러스터된 테이블이 대상 테이블이 될 수 있지만, 수집 프로세스 중에는 클러스터링이 발생하지 않습니다.

  • 복제: 복제는 지원되지 않습니다.

  • ALTER PIPE SET PIPE_EXECUTION_PAUSED = true: openChannel이 일시 중지되면 수집이 즉시 중지되지 않을 수 있습니다.

  • 승인 역할: 기본 역할은 승인에 사용됩니다. 다른 역할을 지정하는 기능은 향후 추가될 예정입니다.

  • 시간대: SDK 는 자동으로 UTC 를 사용합니다. 사용자는 이 설정을 변경할 수 없습니다.

  • 빈 페이로드 제한: SDK 및 REST API 는 빈 페이로드가 포함된 행 세트 제출을 지원하지 않습니다. 성공적인 수집을 위해서는 제출물에 적어도 1개의 데이터 행이 포함되어야 합니다.

  • 오류 메시지 표시 여부: 오류 메시지는 채널 상태 응답에서 사용할 수 있지만 새 채널 기록 뷰에는 표시되지 않습니다.