Aktivieren von Snowpipe-Fehlerbenachrichtigungen für Microsoft Azure Event Grid

Unter diesem Thema wird eine Anleitung für das Übertragen von Snowpipe-Fehlerbenachrichtigungen an das Microsoft Azure Event Grid (Event Grid) bereitgestellt.

Mit dieser Funktion können Fehlerbenachrichtigungen für die folgenden Typen von Workloads ausgegeben werden:

  • Automatische Erfassung mit Snowpipe.

  • Aufrufe des Snowpipe-REST-API-Endpunkts für insertFiles.

  • Workload von Apache Kafka unter Verwendung des Snowflake-Konnektors für Kafka nur mit der Snowpipe-Erfassungsmethode.

Unter diesem Thema:

Unterstützung von Cloudplattformen

Dieses Feature ist derzeit auf Snowflake-Konten beschränkt, die auf Microsoft Azure gehostet werden. Snowpipe kann zwar Daten aus Dateien in jedem unterstützten Cloudspeicherdienst laden, Push-Benachrichtigungen an Event Grid werden jedoch nur bei Snowflake-Konten unterstützt, die auf Azure gehostet werden.

Anmerkungen

  • Snowflake garantiert eine mindestens einmalige Zustellung von Fehlerbenachrichtigungen (d. h. es werden mehrere Versuche unternommen, um sicherzustellen, dass mindestens ein Versuch erfolgreich ist, was zu doppelten Meldungen führen kann).

  • Dieses Feature wird mithilfe des Benachrichtigungsintegrationsobjekts implementiert. Eine Benachrichtigungsintegration ist ein Snowflake-Objekt, das als Schnittstelle zwischen Snowflake und Cloud-Meldungswarteschlangendiensten von Drittanbietern dient. Eine einzelne Benachrichtigungsintegration kann mehrere Pipes unterstützen.

Aktivieren von Fehlerbenachrichtigungen

Schritt 1: Erstellen eines kundenspezifischen Event Grid-Themas

Ein Event Grid-Thema stellt einen Endpunkt bereit, an den die Quelle Ereignisbenachrichtigungen sendet. Erstellen Sie ein dediziertes Thema, um von Snowflake veröffentlichte Fehlerbenachrichtigungen zu erhalten. Sie können ein einziges Thema verwenden, um Fehlerbenachrichtigungen für alle Pipes (für Snowpipe-Fehlerbenachrichtigungen) oder Aufgaben (für Aufgabenfehlerbenachrichtigungen) in Ihrem Snowflake-Konto zu erhalten.

Eine Anleitung zum Erstellen von Event Grid-Themen finden Sie in der Event Grid-Dokumentation. Notieren Sie sich den Endpunkt des Event Grid-Themas, den Sie später in dieser Anleitung benötigen werden.

Abonnieren Sie optional das Thema, um Event Grid mitzuteilen, welche Ereignisse Sie verfolgen möchten und wohin diese Ereignisse gesendet werden sollen.

Schritt 2: Erstellen einer Benachrichtigungsintegration in Snowflake

Mandanten-ID abrufen

Rufen Sie Ihre Azure-Mandanten-ID ab, die Sie später in dieser Anleitung benötigen.

  1. Melden Sie sich beim Microsoft Azure-Portal an.

  2. Navigieren Sie zu Azure Active Directory » Properties. Notieren Sie den Wert Tenant ID zum späteren Verweisen. Die Verzeichnis-ID oder Mandanten-ID wird benötigt, um die Zustimmungs-URL zu generieren, die Snowflake Zugriff auf das Event Grid-Thema gewährt.

Benachrichtigungsintegration erstellen

Erstellen Sie mit dem Befehl CREATE NOTIFICATION INTEGRATION eine Integration. Eine Integration ist ein Snowflake-Objekt, das auf die von Ihnen erstellte Azure-Speicherwarteschlange verweist.

Bemerkung

Dieser SQL-Befehl kann nur von Kontoadministratoren (Benutzer mit der Rolle ACCOUNTADMIN) oder von Rollen mit der globalen Berechtigung CREATE INTEGRATION ausgeführt werden.

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

Beispiel:

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

Wobei:

  • event_grid_topic_endpoint ist der Endpunkt des Event Grid-Themas, den Sie sich unter Schritt 1 notiert haben.

  • azure_tenant_id ist Ihre Azure-Verzeichnis-ID bzw. Ihre Mandanten-ID, die Sie zuvor in diesem Abschnitt notiert haben.

Snowflake Zugriff auf das Thema gewähren

  1. Führen Sie den Befehl DESCRIBE INTEGRATION aus, um die Zustimmungs-URL abzurufen:

    DESC NOTIFICATION INTEGRATION <integration_name>;
    
    Copy

    Wobei:

    Beachten Sie die Werte in den folgenden Spalten:

    AZURE_CONSENT_URL

    URL der Microsoft-Berechtigungsanforderungsseite.

    AZURE_MULTI_TENANT_APP_NAME

    Name der Snowflake-Clientanwendung, die für Ihr Konto erstellt wurde. In einem späteren Schritt in dieser Anleitung müssen Sie der Anwendung die erforderlichen Berechtigungen erteilen, um ein Zugriffstoken für die zulässigen Themen zu erhalten.

  2. Navigieren Sie in einem Webbrowser zu der in der Spalte AZURE_CONSENT_URL angegebenen URL. Es wird eine Microsoft-Berechtigungsanforderungsseite angezeigt.

  3. Klicken Sie auf die Schaltfläche Accept. Mit dieser Aktion kann dem Azure-Dienstprinzipal, der für Ihr Snowflake-Konto erstellt wurde, ein Zugriffstoken für die angegebenen Ressourcen in Ihrem Mandantenbereich zugewiesen werden. Das Abrufen eines Zugriffstokens ist nur erfolgreich, wenn Sie dem Dienstprinzipal die entsprechenden Berechtigungen für den Container erteilen (siehe nächster Schritt).

    Die Microsoft-Berechtigungsanforderungsseite leitet auf die Snowflake-Firmenwebsite (snowflake.com) um.

  4. Melden Sie sich beim Microsoft Azure-Portal an.

  5. Navigieren Sie zu Azure Active Directory » Enterprise applications. Überprüfen Sie, ob der Snowflake-Anwendungsbezeichner, den Sie sich in Schritt 2 in diesem Abschnitt notiert haben, aufgeführt ist.

    Wichtig

    Wenn Sie die Snowflake-Anwendung zu einem anderen Zeitpunkt in Azure Active Directory löschen, funktioniert die Benachrichtigungsintegration nicht mehr.

  6. Navigieren Sie zu Event Grid Topics » topic_name, wobei topic_name der Name des Themas ist, das Sie für den Empfang von Ereignisbenachrichtigungen erstellt haben.

  7. Klicken Sie auf Access Control (IAM) » Add role assignment.

  8. Suchen Sie nach dem Snowflake-Dienstprinzipal. Dies ist die Identität in der Eigenschaft AZURE_MULTI_TENANT_APP_NAME der Ausgabe von DESC NOTIFICATION INTEGRATION (in Schritt 1). Suchen Sie in der Eigenschaft AZURE_MULTI_TENANT_APP_NAME nach der Zeichenfolge vor dem Unterstrich.

    Wichtig

    • Es kann eine Stunde oder länger dauern, bis Azure den über die oben genannte Microsoft-Anforderungsseite angeforderten Snowflake-Dienstprinzipal erstellt hat. Wenn der Dienstprinzipal nicht sofort verfügbar ist, empfehlen wir, ein bis zwei Stunden zu warten und ihn dann erneut zu suchen.

    • Wenn Sie den Dienstprinzipal löschen, funktioniert die Benachrichtigungsintegration nicht mehr.

  9. Erteilen Sie der Snowflake-Anwendung die Berechtigung EventGrid Data Sender.

Schritt 3: Aktivieren von Fehlerbenachrichtigungen in Pipes

Eine einzelne Benachrichtigungsintegration kann von mehreren Pipes gemeinsam genutzt werden. Im Hauptteil der Fehlermeldung werden unter anderem die Pipe, der externe Stagingbereich mit seinem Pfad sowie die Datei, in der der Fehler aufgetreten ist, angegeben.

Um Fehlerbenachrichtigungen für eine Pipe zu aktivieren, geben Sie einen ERROR_INTEGRATION-Parameterwert an.

Bemerkung

Zum Erstellen oder Ändern einer Pipe, die auf eine Benachrichtigungsintegration verweist, ist eine Rolle erforderlich, die über die Berechtigung USAGE für die Benachrichtigungsintegration verfügt. Außerdem muss die Rolle entweder die CREATE PIPE-Berechtigung für das Schema oder die OWNERSHIP-Berechtigung für die Pipe haben.

Beachten Sie, dass für die Bearbeitung eines Objekts in einem Schema auch die Berechtigung USAGE für die übergeordnete Datenbank und das Schema erforderlich ist.

Eine Anleitung zum Erstellen einer kundenspezifischen Rolle mit einer bestimmten Gruppe von Berechtigungen finden Sie unter Erstellen von kundenspezifischen Rollen.

Allgemeine Informationen zu Rollen und Berechtigungen zur Durchführung von SQL-Aktionen auf sicherungsfähigen Objekten finden Sie unter Übersicht zur Zugriffssteuerung.

Neue Pipe

Erstellen Sie eine neue Pipe mit CREATE PIPE.

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

Wobei:

ERROR_INTEGRATION = <Name_der_Integration>

Name der Benachrichtigungsintegration, die Sie in Schritt 4: Erstellen der Benachrichtigungsintegration (unter diesem Thema) erstellt haben.

Beispiel:

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

Vorhandene Pipe

Ändern Sie eine vorhandene Pipe mit ALTER PIPE:

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

<Name_der_Integration> ist der Name der Benachrichtigungsintegration, die Sie in Schritt 4: Erstellen der Benachrichtigungsintegration (unter diesem Thema) erstellt haben.

Beispiel:

ALTER PIPE mypipe SET ERROR_INTEGRATION = my_notification_int;
Copy

Meldungsnutzlast von Fehlerbenachrichtigungen

Im Hauptteil der Fehlermeldungen werden die Pipe und die während des Ladevorgangs aufgetretenen Fehler angegeben.

Nachfolgend finden Sie ein Beispiel für eine Meldungsnutzlast, die einen Snowpipe-Fehler beschreibt. Die Nutzlast kann eine oder mehrere Fehlermeldungen enthalten.

{\"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

Beachten Sie, dass Sie die Zeichenfolge in ein JSON-Objekt parsen müssen, um die Werte in der Nutzlast zu verarbeiten.