Amazon SNS용 Snowpipe 오류 알림 활성화

Amazon SNS용 Snowpipe 오류 알림 활성화

이 주제는 Snowpipe 오류 알림을 Amazon Simple Notification Service(SNS) 서비스로 푸시하는 지침을 제공해요. SNS는 게시/구독 메시징 서비스예요.

이 기능은 다음 유형의 로드에 대한 오류 알림을 푸시할 수 있어요.

  • 자동 수집(auto-ingest) Snowpipe.
  • Snowpipe insertFiles REST API 엔드포인트 호출.
  • Kafka용 Snowflake 커넥터를 사용한 Apache Kafka 로드(Snowpipe 수집 방식만).

출처: Documentation

본문

클라우드 플랫폼 지원

현재 이 기능은 AWS(Amazon Web Services)에 호스팅된 Snowflake 계정으로 제한돼요. Snowpipe는 모든 지원되는 클라우드 스토리지 서비스의 파일에서 데이터를 로드할 수 있지만, SNS로의 푸시 알림은 AWS에 호스팅된 Snowflake 계정에서만 지원돼요.

참고 사항

  • 이 기능은 알림 통합(notification integration) 객체를 사용해 구현돼요. 알림 통합은 Snowflake와 타사 클라우드 메시지 대기열 서비스 사이의 인터페이스를 제공하는 Snowflake 객체예요. 단일 알림 통합은 여러 파이프를 지원할 수 있어요.
  • Snowflake는 오류 알림의 최소 한 번(at-least-once) 메시지 전달을 보장해요(즉, 메시지를 여러 번 전달하려 시도해 적어도 한 번의 시도가 성공하도록 하며, 이로 인해 중복 메시지가 발생할 수 있어요).

오류 알림 활성화

알림 통합 만들기

Amazon SNS 토픽으로 알림을 보내는 알림 통합 만들기를 참고해요.

파이프에서 오류 알림 활성화

단일 알림 통합을 여러 파이프가 공유할 수 있어요. 오류 메시지의 본문은 오류가 발생한 파이프, 외부 스테이지와 경로, 그리고 파일을 다른 세부 정보와 함께 식별해요.

파이프에 대해 오류 알림을 활성화하려면 ERROR_INTEGRATION 매개 변수 값을 지정해요.

참고 — 알림 통합을 참조하는 파이프를 만들거나 수정하려면 알림 통합에 USAGE 권한이 있는 역할이 필요해요. 또한 그 역할은 스키마에 CREATE PIPE 권한 또는 파이프에 OWNERSHIP 권한 중 하나를 각각 가져야 해요. 스키마의 객체에 대해 작업하려면 상위 데이터베이스에 대한 권한이 하나 이상이고 상위 스키마에 대한 권한이 하나 이상 필요해요. 지정된 권한 집합으로 사용자 지정 역할을 만드는 지침은 사용자 지정 역할 만들기를 참고해요. 보안 객체에 대해 SQL 작업을 수행하기 위한 역할 및 권한 부여에 대한 일반적인 정보는 액세스 제어 개요를 참고해요.

새 파이프

CREATE PIPE로 새 파이프를 만들어요. 자동 데이터 로드(즉, 자동 수집 Snowpipe)를 구성하려면 추가 파이프 매개 변수가 필요하다는 점에 주의해요. 지침은 클라우드 메시징으로 연속 데이터 로드 자동화를 참고해요.

CREATE PIPE <name>
  [ AUTO_INGEST = TRUE | FALSE  ]
  ERROR_INTEGRATION = <integration_name>
  AS <copy_statement>

여기서 ERROR_INTEGRATION = <integration_name>은 알림 통합 만들기에서 만든 알림 통합의 이름이에요.

다음 예제는 오류 알림과 자동 데이터 로드를 모두 지원하는 CREATE PIPE 문을 보여줘요.

CREATE PIPE mypipe
  AUTO_INGEST = TRUE
  ERROR_INTEGRATION = my_notification_int
  AS
  COPY INTO mydb.public.mytable
  FROM @mydb.public.mystage;
기존 파이프

ALTER PIPE를 사용해 기존 파이프를 수정해요.

ALTER PIPE <name> SET ERROR_INTEGRATION = <integration_name>;

여기서 <integration_name>은 알림 통합 만들기에서 만든 알림 통합의 이름이에요.

예를 들어:

ALTER PIPE mypipe SET ERROR_INTEGRATION = my_notification_int;

오류 알림 메시지 페이로드

오류 메시지의 본문은 파이프와 로드 중 발생한 오류를 식별해요.

다음은 Snowpipe 오류를 설명하는 샘플 메시지 페이로드예요. 페이로드는 하나 이상의 오류 메시지를 포함할 수 있어요.

{"version":"1.0","messageId":"a62e34bc-6141-4e95-92d8-f04fe43b43f5","messageType":"INGEST_FAILED_FILE","timestamp":"2021-10-22T19:15:29.471Z","accountName":"MYACCOUNT","pipeName":"MYDB.MYSCHEMA.MYPIPE","tableName":"MYDB.MYSCHEMA.MYTABLE","stageLocation":"s3://mybucket/mypath","messages":[{"fileName":"/file1.csv_0_0_0.csv.gz","firstError":"Numeric value 'abc' is not recognized"}]}

페이로드의 값을 처리하려면 문자열을 JSON 객체로 파싱해야 한다는 점에 주의해요.

더 알아보기