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

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

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

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

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

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

  • 채널 기록 뷰: :doc:`/sql-reference/account-usage/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는 다음 정보를 포함하여 마지막으로 발생한 오류에 대한 자세한 정보를 기록합니다.

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

    • 오류 메시지입니다.

    • 타임스탬프입니다.

  • 오류 보고:

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

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

    • :doc:`/sql-reference/account-usage/snowpipe_streaming_channel_history`는 오류 및 오프셋의 과거 기록을 제공합니다.

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

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

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

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

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

      • 관리자에게 경고하기.

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

      • 채널 다시 열기.

클라이언트 측 오류 처리 및 필수 작업

Snowpipe Streaming SDK는 일시적 오류에 대한 내부 재시도 논리를 구현하여 오류 처리를 간소화합니다. 그러나 치명적인 채널 오류 및 지속적인 인증 문제의 경우 사용자가 직접 조치를 취해야 합니다.

일시적 오류에 대한 SDK 재시도 논리

SDK는 다음 HTTP 상태 코드가 발생하는 경우 일반적으로 임시 또는 일시적 서비스 문제를 나타내므로 채널의 플러시되지 않은 데이터를 서버로 보내는 요청을 자동으로 재시도합니다.

  • 5XX(서버 오류)

  • 429(요청이 너무 많음)

  • 408(요청 시간 제한)

수동으로 다시 열어야 하는 채널 오류

Snowpipe Streaming SDK는 채널을 자동으로 다시 열지 않습니다. 채널이 유효하지 않은 상태가 되면 고객은 명시적으로 채널을 닫았다가 다시 열어 수집을 계속해야 합니다.

채널 상태 응답의 channel_status_code가 :code:`SUCCESS`가 아닌 경우 채널은 유효하지 않은 것으로 간주되며 클라이언트 작업이 필요합니다.

다음 테이블은 치명적인 채널 상태를 나타내며 채널을 다시 열어야 하는 지속되는 오류 코드를 보여줍니다.

오류 코드

컨텍스트

필요한 클라이언트 작업

ERR_PIPE_DOES_NOT_EXIST_OR_NOT_AUTHORIZED

대상 파이프가 없거나 액세스할 수 없습니다.

파이프 문제를 수정합니다. 채널을 다시 엽니다.

ERR_TABLE_DOES_NOT_EXIST_NOT_AUTHORIZED

대상 테이블이 없거나 액세스할 수 없습니다.

테이블 문제를 수정합니다. 채널을 다시 엽니다.

ERR_CHANNEL_HAS_INVALID_ROW_SEQUENCER

행 시퀀스 상태가 유효하지 않습니다.

채널을 다시 엽니다.

ERR_CHANNEL_HAS_INVALID_CLIENT_SEQUENCER

채널 시퀀스 상태가 유효하지 않습니다.

채널을 다시 엽니다.

ERR_CHANNEL_MUST_BE_REOPENED

채널을 사용할 수 없음을 나타내는 일반 오류입니다.

채널을 다시 엽니다.

ERR_CHANNEL_MUST_BE_REOPENED_DUE_TO_ROW_SEQ_GAP

행 시퀀스에서 간격이 감지되었습니다.

채널을 다시 엽니다.

구성 수정이 필요한 인증 오류

수집 시도로 인해 HTTP 인증 오류가 발생한 경우 고객은 기본 권한 또는 자격 증명 문제를 수정해야 합니다. 새 채널에서 즉시 동일한 문제가 발생하므로 이러한 오류가 있을 때는 채널을 다시 열지 마세요.

  • 401(권한 없음)

  • 403(사용할 수 없음)

이러한 오류의 경우 수집을 중지하고 클라이언트 애플리케이션의 보안 구성(예: 파이프 권한, 사용자 역할, 인증 자격 증명)을 수정해야 수집을 재개할 수 있습니다. 인증 문제를 수정한 후 클라이언트를 다시 열어 수집을 계속할 수 있습니다.