검증 및 오류 처리

검증 및 오류 처리 (Validation and error handling)

이 문서는 Snowflake Connector for Kafka가 데이터를 검증하고 오류를 처리하는 방식을 설명해요.

출처: Validation and error handling

본문

Snowpipe 사용 시 검증 및 오류 처리

Snowpipe를 사용하는 Kafka 커넥터에서 오류가 발생하면 커넥터는 로드에 실패한 파일을 대상 테이블의 스테이지로 이동시켜요. 대상 테이블 스테이지의 구문은 @[namespace.]%table_name이에요.

로드 중 발생한 오류를 확인하려면 COPY_HISTORY 뷰를 쿼리하세요:

SELECT *
  FROM TABLE(INFORMATION_SCHEMA.COPY_HISTORY(TABLE_NAME=>'mytable'))
  ORDER BY LAST_LOAD_TIME DESC;

STATUS 컬럼은 파일이 로드되었는지, 부분적으로 로드되었는지, 실패했는지를 보여주고, FIRST_ERROR_MESSAGE 컬럼은 실패 원인을 제공해요.

테이블 스테이지의 파일을 나열하려면:

LIST @mydb.public.%mytable;

Snowpipe Streaming 사용 시 검증 및 오류 처리

Snowpipe Streaming을 사용하는 Kafka 커넥터는 오류 처리를 위해 DLQ(dead-letter queue)를 지원해요. DLQ를 활성화하면 오류가 발생한 레코드가 별도의 DLQ 토픽으로 이동되어, 메시지 손실 없이 오류를 분석할 수 있어요.

DLQ 관련 구성 속성:

| 속성 | 설명 | | errors.tolerance | all로 설정하면 오류가 발생한 레코드를 건너뛰고 계속 처리해요. none(기본값)이면 오류 시 중지해요. | | errors.deadletterqueue.topic.name | DLQ 토픽의 이름. | | errors.deadletterqueue.context.headers.enable | DLQ 레코드에 원본 레코드의 헤더를 포함할지 여부. |

DLQ 속성에 대한 자세한 내용은 Snowpipe Streaming으로 Kafka 커넥터 사용 문서를 참고하세요.

잘못된 레코드 식별

로드된 파일이 소스 형식(Avro, JSON, Protobuf)으로 변환되지 않은 원시 바이트인 경우 파일 이름 형식에 오류가 발생한 레코드의 오프셋이 포함돼요. 형식은 다음과 같아요:

<connector_name>/<table_name>/<partition>/offset_(<key>/<value>_)<timestamp>.gz

문제를 해결하려면 레코드를 새 레코드로 다시 보내야 해요.

파일 수동 로드

테이블 스테이지에 있는 파일을 수동으로 검증·로드하려면:

  1. LIST @mydb.public.%mytable;로 파일을 나열하세요.
  2. GET으로 파일을 로컬에 다운로드하세요.
  3. CREATE STAGE로 같은 형식의 내부 스테이지를 만들고 PUT으로 파일을 업로드하세요.
  4. COPY INTO 문에 VALIDATION_MODE = 'RETURN_ALL_ERRORS'를 지정해 오류를 확인하세요:
COPY INTO mydb.public.t1
  FROM @mydb.public.kafka_json
  FILE_FORMAT = (TYPE = JSON)
  VALIDATION_MODE = 'RETURN_ALL_ERRORS';
  1. 오류를 수정하고 COPY INTO로 데이터를 다시 로드하세요.

더 알아보기 (Learn more)