고성능 Snowpipe Streaming에서의 오류 처리

이 항목에서는 고성능 버전의 Snowpipe Streaming에서 사용할 수 있는 오류 처리 메커니즘에 대해 간략하게 설명합니다. 이 개선된 접근법은 자세한 오류 정보를 제공하고 전반적인 오류 처리 프로세스를 개선하여 더욱 강력하고 유익한 경험을 제공합니다.

고성능 아키텍처의 주요 오류 처리 기능

  • 채널 상태 엔드포인트 개선: 이번 버전에서는 채널 상태 엔드포인트를 확장하여 보다 포괄적인 오류 정보를 제공합니다.

  • 세분화된 오류 세부 정보: 고성능 버전은 오류가 발생한 위치를 식별하고 수집 문제의 근본 원인을 찾는 데 도움이 되는 더 자세한 오류 정보를 제공합니다.

  • 향상된 클라이언트 경험: 고성능 버전은 클라이언트의 오류 처리를 간소화하여 오류 추론 및 복구의 복잡성을 줄여줍니다.

  • 새로운 채널 레코드 뷰: 또한, 오류를 모니터링하고 위치를 파악할 수 있도록 채널 활동 레코드를 제공하는 SNOWPIPE_STREAMING_CHANNEL_HISTORY 뷰 를 도입했습니다. 이 기능을 사용하면 오류 추세를 추적하고 잠재적인 문제를 선제적으로 해결할 수 있습니다.

채널 상태 엔드포인트 세부 정보

고성능 아키텍처는 더 자세한 정보를 제공하기 위해 새로운 채널 상태 엔드포인트를 도입합니다. 이 엔드포인트는 채널에 대한 특정 시점 정보를 반환합니다.

클래식 아키텍처의 채널 상태 정보(statusCode, persistedOffsetToken)와 더불어 고성능 아키텍처에는 다음이 포함됩니다.

  • channel_status_code: 스트림 채널의 현재 작업 상태를 나타냅니다. 이 코드는 채널의 상태와 데이터 수집 기능에 대한 높은 수준의 표시를 제공합니다.

  • last_commited_offset_token: Snowflake에 의해 대상 테이블에 성공적으로 커밋된 마지막 행 세트의 오프셋 토큰을 나타냅니다. 이는 진행 상황을 추적하고 데이터 전송을 보장하는 데 매우 중요합니다.

  • created_on_ms: 밀리초 단위의 타임스탬프로, Snowflake 내에서 스트림 채널이 처음 생성된 시점을 나타냅니다.

  • database_name: 스트림 채널이 데이터를 수집하도록 구성된 데이터베이스의 이름입니다.

  • schema_name: 스트리밍 채널의 대상 테이블이 있는 지정된 데이터베이스 내의 스키마 이름입니다.

  • pipe_name: 특정 대상 테이블로 데이터를 수집하기 위해 이 Snowpipe Streaming 채널을 활용하도록 구성된 Snowpipe 오브젝트의 이름입니다.

  • channel_name: 특정 Snowpipe Streaming 채널 인스턴스에 대해 사용자가 생성한 이름입니다.

  • rows_inserted: 스트림 생성 이후 이 스트림 채널을 통해 대상 테이블에 성공적으로 삽입된 데이터 행의 총 개수입니다.

  • rows_parsed: 이 채널에 대해 Snowpipe Streaming 서비스에서 처리 및 구문 분석한 데이터 행의 총 개수입니다. (오류 등으로 인해 반드시 삽입되지 않을 수도 있음).

  • rows_error_count: 처리 중 오류가 발생하여 이 채널에 대한 Snowpipe Streaming 서비스에서 거부된 데이터 행의 총 개수입니다.

  • last_error_offset_upper_bound: 오류가 포함된 마지막 행 집합의 오프셋 토큰 범위의 상한입니다. 이는 데이터 스트림 내에서 가장 최근에 발생한 오류의 대략적인 위치를 식별하는 데 도움이 됩니다.

  • last_error_message: 최신 오류 코드에 해당하는 사람이 읽을 수 있는 메시지입니다.

  • last_error_timestamp: 이 스트림 채널에서 가장 최근에 오류가 발생한 시점을 나타내는 타임스탬프입니다.

  • snowflake_avg_processing_latency_ms: 이 채널에서 수신한 행 집합을 처리할 때 Snowflake 서비스에서 관찰한 평균 지연 시간(밀리초)입니다. 이 메트릭은 Snowflake 내 수집 파이프라인의 성능에 대한 인사이트를 제공합니다.

고성능 아키텍처의 오류 처리 흐름

  • 클라이언트가 데이터를 전송합니다. 클라이언트 애플리케이션은 Snowpipe Streaming SDK 를 사용하여 appendRow(s) API 를 통해 데이터를 Snowflake로 전송합니다.

  • 서버 처리: Snowflake 서비스가 데이터를 처리합니다. 여기에는 다음이 포함됩니다.

    • 데이터 버퍼링.

    • 데이터 구문 분석 및 유효성 검사.

    • 데이터를 테이블에 커밋합니다.

  • 오류 감지: 서버 측 처리 스테이지 중 어느 단계에서든 오류가 발생할 수 있습니다.

  • 오류 레코드: Snowflake는 마지막으로 발생한 오류에 대한 자세한 정보를 기록합니다.

    • 오류가 포함된 마지막 행 집합의 오프셋 토큰 범위의 상한입니다. 이는 데이터 스트림 내에서 가장 최근에 발생한 오류의 대략적인 위치를 식별하는 데 도움이 됩니다.

    • 오류 메시지입니다.

    • 타임스탬프입니다.

  • 오류 보고:

    • 개선된 채널 상태 엔드포인트는 기록된 오류 정보에 대한 액세스를 제공합니다.

    • 클라이언트는 이 엔드포인트를 쿼리하여 마지막으로 발생한 오류 세부 정보를 검색할 수 있습니다.

    • Snowflake는 오류 및 오프셋을 포함한 채널 활동의 과거 레코드를 제공하는 SNOWPIPE_STREAMING_CHANNEL_HISTORY 뷰 도 도입합니다.

  • 클라이언트 작업: 클라이언트 애플리케이션은 오류 정보를 사용하여 다음을 수행합니다.

    • 오류의 원인을 식별합니다.

    • 다음과 같은 적절한 오류 처리 논리를 구현합니다.

      • 실패한 작업을 다시 시도합니다.

      • 오류를 로그 기록합니다.

      • 관리자에게 경고하기.

      • 잘못된 데이터를 데드 레터 큐로 이동합니다.

      • 채널 다시 열기.