Aktivieren von Snowpipe-Fehlerbenachrichtigungen für Google Pub/Sub¶
Unter diesem Thema wird eine Anleitung für das Übertragen von Snowpipe-Fehlerbenachrichtigungen an den Google Cloud Pub/Sub (Pub/Sub)-Dienst 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 Google Cloud Platform (GCP) gehostet werden. Snowpipe kann zwar Daten aus Dateien in jedem unterstützten Cloudspeicherdienst laden, Push-Benachrichtigungen an Pub/Sub werden jedoch nur bei Snowflake-Konten unterstützt, die auf GCP 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 des Pub/Sub-Themas¶
Erstellen Sie ein Pub/Sub-Thema, das Fehlerbenachrichtigungsmeldungen von Snowflake empfangen kann, oder verwenden Sie ein vorhandenes Thema. Sie können das Thema mit Cloud Shell oder Cloud SDK erstellen. Weitere Informationen dazu finden Sie in der Pub/Sub-Dokumentation unter Themen erstellen und verwenden.
Führen Sie zum Beispiel den folgenden Befehl aus, um ein leeres Thema zu erstellen:
$ gsutil notification create -t <topic>
Wenn das Thema bereits vorhanden ist, wird es vom Befehl verwendet. Andernfalls wird ein neues Thema erstellt.
Schritt 2: Erstellen des Pub/Sub-Abonnements¶
Erstellen Sie optional ein Abonnement für das Pub/Sub-Thema, um Fehlerbenachrichtigungen abzurufen. Sie können ein Abonnement mit Pull-Bereitstellung für das Pub/Sub-Thema über die Cloud Console, das Befehlszeilentool gcloud
oder die Cloud Pub/Sub-API erstellen. Anweisungen finden Sie unter Verwalten von Themen und Abonnements in der Pub/Sub-Dokumentation.
Schritt 3: Erstellen einer Benachrichtigungsintegration in Snowflake¶
Erstellen Sie eine Benachrichtigungsintegration mit dem Befehl CREATE NOTIFICATION INTEGRATION. Die Benachrichtigungsintegration verweist auf Ihr Pub/Sub-Thema. Snowflake verknüpft die Benachrichtigungsintegration mit einem Google Cloud Platform (GCP)-Dienstkonto, das für Ihr Konto erstellt wurde. Snowflake erstellt ein einziges Dienstkonto, auf das von allen GCP-Speicherintegrationen in Ihrem Snowflake-Konto verwiesen wird.
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.
Das GCP-Dienstkonto für Benachrichtigungsintegrationen unterscheidet sich von dem Dienstkonto, das für Speicherintegrationen erstellt wird.
CREATE NOTIFICATION INTEGRATION <integration_name>
ENABLED = TRUE
TYPE = QUEUE
DIRECTION = OUTBOUND
NOTIFICATION_PROVIDER = GCP_PUBSUB
GCP_PUBSUB_TOPIC_NAME = '<topic_id>'
Wobei:
integration_name
ist der Name der neuen Integration.topic_id
ist das Pub/Sub-Thema, an das Snowflake Fehlerbenachrichtigungen sendet. Weitere Informationen dazu finden Sie unter Schritt 1: Erstellen des Pub/Sub-Themas (unter diesem Thema).
Beispiel:
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';
Schritt 4: Gewähren von Snowflake-Zugriff auf das Pub/Sub-Abonnement¶
Führen Sie den Befehl DESCRIBE INTEGRATION aus, um die Snowflake-Dienstkonto-ID abzurufen:
DESC NOTIFICATION INTEGRATION <integration_name>;
Wobei:
integration_name
ist der Name der Integration, die Sie in „Schritt 1: Benachrichtigungsintegration in Snowflake erstellen“ erstellt haben.
Beispiel:
DESC NOTIFICATION INTEGRATION my_notification_int;
Notieren Sie den Namen des Dienstkontos in der Spalte GCP_PUBSUB_SERVICE_ACCOUNT, die das folgende Format hat:
<service_account>@<project_id>.iam.gserviceaccount.com
Melden Sie sich bei der Google Cloud Platform Console als Projekteditor an.
Wählen Sie im Startseiten-Dashboard die Option Big Data » Pub/Sub » Subscriptions aus.
Wählen Sie das Abonnement aus, das für den Zugriff konfiguriert werden soll.
Klicken Sie oben rechts auf SHOW INFO PANEL. Der Informationsbereich für das Abonnement wird erweitert.
Suchen Sie im Feld Add members nach dem Dienstkontonamen, den Sie sich in Schritt 2 notiert haben.
Wählen Sie in der Dropdown-Liste Select a role die Option Pub/Sub Publisher aus.
Klicken Sie auf die Schaltfläche Add. Der Name des Dienstkontos wird der Dropdown-Liste Pub/Sub Publisher im Informationsbereich hinzugefügt.
Schritt 5: 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>
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;
Vorhandene Pipe¶
Ändern Sie eine vorhandene Pipe mit ALTER PIPE.
Bemerkung
Wenn beim Erstellen der Pipe eine Benachrichtigungsintegration angegeben wurde, ist es notwendig, zuerst den ERROR_INTEGRATION Parameter zu deaktivieren (mit ALTER PIPE … UNSET ERROR_INTEGRATION) und dann den Parameter festzulegen.
ALTER PIPE <name> SET ERROR_INTEGRATION = <integration_name>;
<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;
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\":\"gcs://mybucket/mypath\",\"messages\":[{\"fileName\":\"/file1.csv_0_0_0.csv.gz\",\"firstError\":\"Numeric value 'abc' is not recognized\"}]}
Beachten Sie, dass Sie die Zeichenfolge in ein JSON-Objekt parsen müssen, um die Werte in der Nutzlast zu verarbeiten.