Microsoft Azure Event Grid에 대한 Snowpipe 오류 알림 활성화하기

이 항목에서는 Snowpipe 오류 알림을 Microsoft Azure Event Grid (Event Grid)로 푸시하는 지침을 제공합니다.

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

  • Snowpipe 자동 수집.

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

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

이 항목의 내용:

클라우드 플랫폼 지원

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

참고

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

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

오류 알림 활성화하기

1단계: 사용자 지정 Event Grid 항목 만들기

Event Grid 항목은 원본에서 이벤트 알림을 전송하는 엔드포인트를 제공합니다. Snowflake에서 게시한 오류 알림을 수신할 전용 항목을 만듭니다. 단일 항목을 사용하여 Snowflake 계정의 모든 파이프(Snowpipe 오류 알림 의 경우) 또는 작업(작업 오류 알림 의 경우)에 대한 오류 알림을 수신할 수 있습니다.

Event Grid 항목 생성 지침은 Event Grid 설명서 를 참조하십시오. 이러한 지침의 뒷부분에서 필요하게 될 Event Grid 항목 엔드포인트를 기록합니다.

선택적으로 항목을 구독하여 추적하려는 이벤트와 해당 이벤트를 보낼 위치를 Event Grid에 알립니다.

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

테넌트 ID 검색하기

이러한 지침의 뒷부분에서 필요하게 될 Azure 테넌트 ID를 검색합니다.

  1. Microsoft Azure 포털에 로그인합니다.

  2. Azure Active Directory » Properties 으로 이동합니다. 나중에 참조할 수 있도록 Tenant ID 값을 기록합니다. ID 디렉터리 또는 테넌트 ID 는 Event Grid 항목에 대한 액세스 권한을 Snowflake에 부여하는 동의 URL을 생성하기 위해 필요합니다.

알림 통합 만들기

CREATE NOTIFICATION INTEGRATION 명령을 사용하여 통합을 생성합니다. 통합은 만든 Azure 저장소 큐를 참조하는 Snowflake 오브젝트입니다.

참고

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

CREATE NOTIFICATION INTEGRATION <integration_name>
  ENABLED = true
  TYPE = QUEUE
  NOTIFICATION_PROVIDER = AZURE_EVENT_GRID
  DIRECTION = OUTBOUND
  AZURE_EVENT_GRID_TOPIC_ENDPOINT = '<event_grid_topic_endpoint>'
  AZURE_TENANT_ID = '<azure_tenant_id>'
Copy

예:

CREATE NOTIFICATION INTEGRATION myint
  ENABLED = true
  TYPE = QUEUE
  NOTIFICATION_PROVIDER = AZURE_EVENT_GRID
  DIRECTION = OUTBOUND
  AZURE_EVENT_GRID_TOPIC_ENDPOINT = 'https://myaccount.region-1.eventgrid.azure.net/api/events'
  AZURE_TENANT_ID = 'mytenantid';
Copy

여기서

  • event_grid_topic_endpoint 는 1단계 섹션에서 기록한 Event Grid 항목 엔드포인트입니다.

  • azure_tenant_id 는 이 섹션의 앞부분에서 기록한 Azure 디렉터리 ID 또는 테넌트 ID입니다.

항목에 Snowflake 액세스 권한 부여

  1. DESCRIBE INTEGRATION 명령을 실행하여 동의 URL을 검색합니다.

    DESC NOTIFICATION INTEGRATION <integration_name>;
    
    Copy

    여기서

    다음 열의 값을 참고하십시오.

    AZURE_CONSENT_URL

    Microsoft 권한 요청 페이지에 대한 URL입니다.

    AZURE_MULTI_TENANT_APP_NAME

    계정에 대해 생성된 Snowflake 클라이언트 애플리케이션의 이름입니다. 이 섹션의 이후 단계에서는 허용되는 항목에 대한 액세스 토큰을 획득하기 위해 필요한 권한을 이 애플리케이션에 부여해야 합니다.

  2. 웹 브라우저에서 AZURE_CONSENT_URL 열의 URL로 이동합니다. 페이지에 Microsoft 권한 요청 페이지가 표시됩니다.

  3. Accept 버튼을 클릭합니다. 이 작업을 통해 Snowflake 계정에 대해 생성된 Azure 서비스 주체에게 tenant 내부의 지정된 리소스에 대한 액세스 토큰이 부여됩니다. 액세스 토큰은 서비스 주체에 컨테이너에 대한 적절한 권한을 부여한 경우에만 획득이 가능합니다(다음 단계 참조).

    Microsoft 권한 요청 페이지가 Snowflake 회사 사이트(snowflake.com)로 리디렉션됩니다.

  4. Microsoft Azure 포털에 로그인합니다.

  5. Azure Active Directory » Enterprise applications 으로 이동합니다. 이 섹션의 2단계에서 기록한 Snowflake 애플리케이션 식별자가 나열되는지 확인합니다.

    중요

    나중에 Azure Active Directory에서 Snowflake 애플리케이션을 삭제하면 알림 통합의 작동이 중지됩니다.

  6. Event Grid Topics » topic_name 으로 이동합니다. 여기서 topic_name 은 이벤트 알림을 수신하려고 만든 항목의 이름입니다.

  7. Access Control (IAM) » Add role assignment 를 클릭합니다.

  8. Snowflake 서비스 포털 주체를 검색합니다. DESC NOTIFICATION INTEGRATION 출력(1단계)에서 AZURE_MULTI_TENANT_APP_NAME 속성의 ID입니다. AZURE_MULTI_TENANT_APP_NAME 속성에서 밑줄 앞의 문자열을 검색합니다.

    중요

    • Azure에서 이 섹션의 Microsoft 요청 페이지를 통해 요청한 Snowflake 서비스 주체를 생성하기 위해서는 1시간이 이상 걸릴 수 있습니다. 서비스 주체를 즉시 사용할 수 없는 경우 1~2시간 기다린 후 다시 검색하는 것이 좋습니다.

    • 서비스 주체를 삭제하면 알림 통합이 작동을 중지합니다.

  9. Snowflake 애플리케이션에 EventGrid Data Sender 권한을 부여합니다.

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

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

파이프에 대한 오류 알림을 활성화하려면 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 <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\":\"azure://myaccount.blob.core.windows.net/mycontainer/mypath\",\"messages\":[{\"fileName\":\"/file1.csv_0_0_0.csv.gz\",\"firstError\":\"Numeric value 'abc' is not recognized\"}]}
Copy

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