Activation des notifications d’erreur Snowpipe pour Amazon SNS

Cette rubrique fournit des instructions pour envoyer des notifications d’erreur Snowpipe au service Amazon Simple Notification Service (SNS). SNS est un service de messagerie de type publication/abonnement.

Cette fonction permet d’envoyer des notifications d’erreur pour les types de chargements suivants :

  • Auto-intégration Snowpipe.

  • Appels vers le point de terminaison de l’API REST insertFiles Snowpipe.

  • Chargements à partir d’Apache Kafka en utilisant le connecteur Snowflake pour Kafka avec la méthode d’ingestion Snowpipe uniquement.

Dans ce chapitre :

Prise en charge de la plateforme Cloud

Cette fonctionnalité est actuellement limitée aux comptes Snowflake hébergés sur Amazon Web Services (AWS). Snowpipe peut charger des données à partir de fichiers dans n’importe quel service de stockage dans le Cloud pris en charge ; cependant, les notifications push vers SNS ne sont prises en charge que dans les comptes Snowflake hébergés sur AWS.

Remarques

  • Cette fonctionnalité est mise en œuvre à l’aide de l’objet d’intégration de notification. Une intégration de notification est un objet Snowflake qui fournit une interface entre Snowflake et des services tiers de mise en file d’attente de messages dans le Cloud. Une seule intégration de notification peut prendre en charge plusieurs canaux.

  • Snowflake garantit la livraison des messages d’erreur au moins une fois (c’est-à-dire que plusieurs tentatives sont faites pour livrer les messages afin de s’assurer qu’au moins une tentative réussisse, ce qui peut entraîner des messages en double).

Activation des notifications d’erreur

Création de l’intégration de notification

Voir Création d’une intégration de notification pour envoyer des notifications à un sujet Amazon SNS.

Activation des notifications d’erreur dans les canaux

Une seule intégration de notification peut être partagée par plusieurs canaux. Le corps des messages d’erreur identifie le canal, la zone de préparation externe et le chemin, ainsi que le fichier d’où provient l’erreur, entre autres détails.

Pour activer les notifications d’erreur pour un canal, spécifiez une valeur de paramètre ERROR_INTEGRATION.

Note

La création ou la modification d’un canal qui fait référence à une intégration de notification nécessite un rôle qui possède le privilège USAGE sur l’intégration de notification. En outre, le rôle doit avoir le privilège CREATE PIPE sur le schéma ou le privilège OWNERSHIP sur le canal, respectivement.

Notez que l’exploitation d’un objet dans un schéma requiert également le privilège USAGE sur la base de données et le schéma parents.

Pour obtenir des instructions sur la création d’un rôle personnalisé avec un ensemble spécifique de privilèges, voir Création de rôles personnalisés.

Pour des informations générales sur les rôles et les privilèges accordés pour effectuer des actions SQL sur des objets sécurisables, voir Aperçu du contrôle d’accès.

Nouveau canal

Créez un nouveau canal en utilisant CREATE PIPE. Notez que la configuration des chargements de données automatisés (c’est-à-dire l’auto-ingestion Snowpipe) nécessite des paramètres de canal supplémentaires. Pour obtenir des instructions, voir Automatisation du chargement continu des données à l’aide de la messagerie Cloud.

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

Où :

ERROR_INTEGRATION = <nom_intégration>

Nom de l’intégration de notification que vous avez créée dans Créer l’intégration des notifications.

L’exemple suivant montre une instruction CREATE PIPE qui prend en charge à la fois les notifications d’erreur et les chargements de données automatisés :

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

Canal existant

Modifiez un canal existant en utilisant ALTER PIPE :

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

<integration_name> est le nom de l’intégration de notification que vous avez créée dans Créer l’intégration des notifications.

Par exemple :

ALTER PIPE mypipe SET ERROR_INTEGRATION = my_notification_int;
Copy

Charge utile du message de notification d’erreur

Le corps des messages d’erreur identifie le canal et les erreurs rencontrées lors d’un chargement.

Voici un exemple de charge utile de message décrivant une erreur Snowpipe. Notez que la charge utile peut inclure un ou plusieurs messages d’erreur.

{\"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\"}]}
Copy

Notez que vous devez analyser la chaîne dans un objet JSON pour traiter les valeurs dans la charge utile.