Google Pub/Sub에 대한 Snowpipe 오류 알림 활성화하기

이 항목에서는 Snowpipe 오류 알림을 Google Cloud Pub/Sub (Pub/Sub) 서비스로 푸시하는 지침을 제공합니다.

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

  • Snowpipe 자동 수집.

  • Snowpipe insertFiles REST API 엔드포인트에 대한 호출.

  • Snowpipe 수집 방법만으로 Kafka용 Snowflake 커넥터를 사용한 Apache Kafka에서의 로드.

이 항목의 내용:

클라우드 플랫폼 지원

현재 이 기능은 Google Cloud Platform(GCP)에 호스팅된 Snowflake 계정으로 제한됩니다. Snowpipe는 지원되는 모든 클라우드 저장소 서비스의 파일에서 데이터를 로딩할 수 있지만, Pub/Sub로의 푸시 알림은 GCP에 호스팅된 Snowflake 계정에서만 지원됩니다.

참고

  • Snowflake는 오류 알림의 메시지 전달을 한 번 이상 보장합니다(즉, 시도가 한 번 이상 성공하도록 보장하려고 메시지 전달 시도가 여러 번 이루어지므로 메시지가 중복될 수 있음).

  • 이 기능은 알림 통합 오브젝트를 사용하여 구현됩니다. 알림 통합은 Snowflake와 서드 파티 클라우드 메시지 큐 서비스 간의 인터페이스를 제공하는 Snowflake 오브젝트입니다. 단일 알림 통합은 여러 파이프를 지원할 수 있습니다.

오류 알림 활성화하기

1단계: Pub/Sub 항목 만들기

Snowflake에서 오류 알림 메시지를 수신하거나 기존 항목을 재사용할 수 있는 Pub/Sub 항목을 만듭니다. Cloud Shell 또는 Cloud SDK 를 사용하여 이 항목을 만들 수 있습니다. 자세한 내용은 Pub/Sub 설명서의 항목 생성 및 사용 을 참조하십시오.

예를 들어 다음 명령을 실행하여 빈 항목을 만듭니다.

$ gsutil notification create -t <topic>
Copy

항목이 이미 있는 경우 명령에서는 해당 항목을 사용하고, 그렇지 않으면 새 항목이 생성됩니다.

2단계: Pub/Sub 구독 만들기

오류 알림을 검색하려면 선택적으로 Pub/Sub 항목에 대한 구독을 만드십시오. 클라우드 콘솔, gcloud 명령줄 도구 또는 클라우드 Pub/Sub API를 사용하여 끌어오기 배달을 사용하는 구독을 만들 수 있습니다. 자세한 지침은 Pub/Sub 설명서의 항목 및 구독 관리하기 를 참조하십시오.

3단계: Snowflake에서 알림 통합 만들기

CREATE NOTIFICATION INTEGRATION 명령을 사용하여 알림 통합을 생성합니다. 알림 통합은 Pub/Sub 항목을 참조합니다. Snowflake는 계정에 대해 생성된 Goodle Cloud Platform(GCP) 서비스 계정과 알림 통합을 연결합니다. Snowflake는 Snowflake 계정의 모든 GCP 알림 통합에서 참조하는 단일 서비스 계정을 생성합니다.

참고

  • 계정 관리자(ACCOUNTADMIN 역할의 사용자) 또는 전역 CREATE INTEGRATION 권한이 있는 역할만 이 SQL 명령을 실행할 수 있습니다.

  • 알림 통합을 위한 GCP 서비스 계정은 저장소 통합을 위해 생성된 서비스 계정과 다릅니다.

CREATE NOTIFICATION INTEGRATION <integration_name>
  ENABLED = TRUE
  TYPE = QUEUE
  DIRECTION = OUTBOUND
  NOTIFICATION_PROVIDER = GCP_PUBSUB
  GCP_PUBSUB_TOPIC_NAME = '<topic_id>'
Copy

여기서

  • integration_name 은 새 통합의 이름입니다.

  • topic_id 는 Snowflake가 오류 알림을 보내는 대상이 되는 Pub/Sub 항목입니다. 자세한 내용은 이 항목의 1단계: Pub/Sub 항목 만들기 섹션을 참조하십시오.

예:

CREATE NOTIFICATION INTEGRATION my_notification_int
  TYPE = QUEUE
  DIRECTION = OUTBOUND
  NOTIFICATION_PROVIDER = GCP_PUBSUB
  ENABLED = true
  GCP_PUBSUB_TOPIC_NAME = 'projects/sdm-prod/topics/mytopic';
Copy

4단계: Pub/Sub 구독에 Snowflake 액세스 권한 부여하기

  1. DESCRIBE INTEGRATION 명령을 사용하여 Snowflake 계정 ID를 검색합니다.

    DESC NOTIFICATION INTEGRATION <integration_name>;
    
    Copy

    여기서

    • integration_name 은 《1단계: Snowflake에서 알림 통합 만들기》에서 생성한 통합의 이름입니다.

    예:

    DESC NOTIFICATION INTEGRATION my_notification_int;
    
    Copy
  2. GCP_PUBSUB_SERVICE_ACCOUNT 열의 서비스 계정 이름을 기록하고 해당 형식은 다음과 같습니다.

    <service_account>@<project_id>.iam.gserviceaccount.com
    
    Copy
  3. Google Cloud Platform Console에 프로젝트 편집자로 로그인합니다.

  4. 홈 대시보드에서 Big Data » Pub/Sub » Subscriptions 을 선택합니다.

  5. 액세스를 구성할 구독을 선택합니다.

  6. 오른쪽 상단 모서리에서 SHOW INFO PANEL 를 클릭합니다. 구독에 대한 정보 패널이 표시됩니다.

  7. Add members 드롭다운에서 기록한 서비스 계정 이름을 검색합니다.

  8. Select a role 드롭다운에서 Pub/Sub Publisher 를 선택합니다.

  9. Add 버튼을 클릭합니다. 서비스 계정 이름이 정보 패널의 Pub/Sub Publisher 역할 드롭다운에 추가됩니다.

5단계: 파이프에서 오류 알림 활성화하기

여러 파이프에서 단일 알림 통합을 공유할 수 있습니다. 오류 메시지 본문을 통해서는 다른 세부 정보 중에서도 파이프, 외부 스테이지 및 경로, 오류가 발생한 파일을 파악할 수 있습니다.

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

참고

알림 통합을 참조하는 파이프를 만들거나 수정하려면 알림 통합에 대한 USAGE 권한이 있는 역할이 필요합니다. 또한, 역할에는 각각 스키마에 대한 CREATE PIPE 권한이나 파이프에 대한 OWNERSHIP 권한도 있어야 합니다.

스키마의 모든 오브젝트에 대해 작업하려면 상위 데이터베이스 및 스키마에 대한 USAGE 권한도 필요합니다.

지정된 권한 세트로 사용자 지정 역할을 만드는 방법에 대한 지침은 사용자 지정 역할 만들기 섹션을 참조하십시오.

보안 오브젝트 에 대해 SQL 작업을 수행하기 위한 역할과 권한 부여에 대한 일반적인 정보는 액세스 제어의 개요 섹션을 참조하십시오.

새 파이프

CREATE PIPE 를 사용하여 새 파이프를 만듭니다.

CREATE PIPE <name>
  AUTO_INGEST = TRUE
  [ INTEGRATION = '<string>' ]
  ERROR_INTEGRATION = <integration_name>
  AS <copy_statement>
Copy

여기서

ERROR_INTEGRATION = <통합_이름>

이 항목의 4단계: 알림 통합 만들기 에서 만든 알림 통합의 이름입니다.

예:

CREATE PIPE mypipe
  AUTO_INGEST = TRUE
  INTEGRATION = 'my_storage_int'
  ERROR_INTEGRATION = my_notification_int
  AS
  COPY INTO mydb.public.mytable
  FROM @mydb.public.mystage;
Copy

기존 파이프

ALTER PIPE 를 사용하여 기존 파이프를 수정합니다.

참고

파이프 생성 시 알림 통합이 지정된 경우 먼저 (ALTER PIPE … UNSET ERROR_INTEGRATION을 사용하여) ERROR_INTEGRATION 매개 변수를 설정 해제 한 다음에 이 매개 변수를 설정해야 합니다.

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

여기서 <통합_이름>4단계: 알림 통합 만들기 에서 만든 알림 통합의 이름입니다.

예:

ALTER PIPE mypipe SET ERROR_INTEGRATION = my_notification_int;
Copy

오류 알림 메시지 페이로드

오류 메시지의 본문에서 파이프와 로딩 중에 발생한 오류를 파악할 수 있습니다.

다음은 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\":\"gcs://mybucket/mypath\",\"messages\":[{\"fileName\":\"/file1.csv_0_0_0.csv.gz\",\"firstError\":\"Numeric value 'abc' is not recognized\"}]}
Copy

페이로드의 값을 처리하려면 문자열을 JSON 오브젝트로 구문 분석해야 합니다.