Journalisation des erreurs dans Snowpipe Streaming avec architecture hautes performances¶
Le journalisation des erreurs pour Snowpipe Streaming s’appuie sur la fonctionnalité de journalisation des erreurs DML de Snowflake pour fournir un moyen solide de gérer et de résoudre les erreurs d’ingestion de données. Cette fonctionnalité empêche la perte silencieuse des données et augmente la visibilité des lignes de données défectueuses. Lorsque la journalisation des erreurs est activée, les données sans erreur continuent de se charger dans votre table cible, tandis que les lignes qui échouent au traitement sont automatiquement acheminées vers une table d’erreurs dédiée pour être examinées et récupérées.
Important
Les données stockées dans les tables d’erreurs sont les charges utiles d’origine envoyées à l’API ou au SDK avant que toute transformation de « pipe » ne soit appliquée. Même si votre « pipe » détruit ou modifie des champs, la charge utile d’origine complète est conservée dans la table des erreurs.
Vue d’ensemble¶
Lors de l’utilisation de l’architecture hautes performances Snowpipe Streaming, le traitement des données s’effectue côté serveur dans Snowflake. L’architecture hautes performances opère implicitement en mode ON_ERROR = CONTINUE, ce qui signifie que les lignes valides sont ingérées tandis que les lignes problématiques sont ignorées.
Options de traitement des erreurs¶
Vous pouvez surveiller et gérer les erreurs d’ingestion comme suit :
Sans tables d’erreurs :
Utilisez getChannelStatus () pour surveiller le nombre d’erreurs agrégées, le dernier message d’erreur et l’horodatage de la dernière erreur.
Interrogez la vue SNOWPIPE_STREAMING_CHANNEL_HISTORY pour les tendances et les modèles d’erreurs historiques.
Ces méthodes vous indiquent que des erreurs se sont produites et combien de, mais pas quelles lignes ont échoué ni leurs charges utiles.
Avec tables d’erreur :
Les lignes qui échouent au traitement sont automatiquement capturées dans une table d’erreurs dédiée.
Chaque ligne d’erreur comprend la charge utile originale complète et les métadonnées d’erreur détaillées.
Vous pouvez interroger, analyser et retraiter les lignes ayant échoué à l’aide du SQL standard.
Des tables d’erreurs complètent le schéma en vous montrant exactement quelles lignes ont échoué et pourquoi, permettant un débogage et une récupération complets.
Activer la journalisation des erreurs¶
Pour activer la journalisation des erreurs pour Snowpipe Streaming, définissez la propriété ERROR_LOGGING sur la table cible. Pour plus de détails sur l’activation et la configuration de la journalisation des erreurs, voir Configurer la journalisation des erreurs DML d’une table.
Lorsque la journalisation des erreurs est activée, la même table d’erreurs capture les erreurs des instructions DML et des charges de travail d’ingestion Snowpipe Streaming.
Interroger les tables d’erreurs¶
Pour interroger la table d’erreurs d’une table de base, utilisez fonction de table ERROR_TABLE. Pour plus de détails sur le schéma de table d’erreurs, le contrôle d’accès et les opérations prises en charge, voir Journalisation des erreurs et tables d’erreurs.
Le résultat contient une ligne pour chaque ligne erronée dans le flux d’ingestion.
Champs d’erreur Snowpipe Streaming¶
Les erreurs Snowpipe Streaming sont stockées dans les mêmes colonnes de table d’erreurs comme erreurs DML (timestamp, query_id, error_code, error_metadata, error_data). Les objets error_metadata et error_data incluent des champs supplémentaires pour Snowpipe Streaming, décrits dans les sections suivantes.
Identifier les erreurs Snowpipe Streaming¶
Le champ error_metadata:service est renseigné avec``snowpipe_streaming`` pour les erreurs de Snowpipe Streaming. Utilisez ce champ pour filtrer les erreurs par source :
Détails des métadonnées de l’erreur¶
Pour les erreurs Snowpipe Streaming, l’objet error_metadata:details contient les champs supplémentaires suivants :
Champ |
Description |
|---|---|
|
Nom du « pipe » utilisé pour ingérer la ligne erronée. |
|
Nom du canal utilisé pour ingérer la ligne erronée. |
|
Jeton de décalage de limite supérieure contenant la ligne erronée. La ligne apparaît dans la charge utile avec ce jeton de décalage ou antérieur. |
|
Indique si la charge utile brute a été tronquée pour tenir dans la table d’erreur (maximum 128MB). |
|
Indique le type de contenu stocké dans la colonne |
Format des données d’erreur¶
Pour les erreurs Snowpipe Streaming, le champ error_data:$1 contient la charge utile brute représentant la ligne erronée.
Si la charge utile contient des caractères UTF-8 non valides, la charge utile brute est stockée sous la forme d’une chaîne binaire codée en base64.
Types de contenu de données d’erreur¶
Le champ error_data_content_type indique le type d’erreur rencontrée et suggère des mesures de correction.
json¶
La ligne erronée est une chaîne JSON syntaxiquement valide, mais une erreur logique s’est produite lors de l’ingestion des données dans la table cible.
Les erreurs logiques courantes sont les suivantes :
Colonnes non nullables manquantes : Une colonne obligatoire avec une contrainte NOT NULL n’était pas fournie dans la charge utile.
Erreurs de conversion de type : Le type de données JSON ne peut pas être converti en type de colonne cible. Par exemple, une valeur de chaîne
"abc"ne peut pas être convertie en colonne NUMBER.Erreurs de transformation : Une erreur s’est produite lors de l’évaluation d’une expression de transformation du « pipe », telle que la division par zéro.
Pour résoudre l’erreur, consultez le message d’erreur dans:code:error_metadata:error_message et le nom de la colonne dans error_metadata:error_source qui a causé l’erreur d’ingestion. Analysez la charge utile avec PARSE_JSON(error_data:$1), corrigez les données et réinsérez-les dans la table cible.
json-invalid¶
Un objet JSON syntaxiquement non valide a été ingéré.
Pour résoudre l’erreur, consultez le message d’erreur dans:code:error_metadata:error_message, qui contient des détails sur l’erreur de syntaxe. Corrigez la charge utile stockée dans error_data:$1 et réinsérez-la dans la table cible.
binary-base64¶
Des données UTF-8 non valides ont été ingérées. La charge utile de l’erreur est stockée dans la table d’erreur sous forme de chaîne binaire codée en base64.
Ce type d’erreur indique généralement une inadéquation de format ou une erreur d’encodage dans la source de données en amont.
Pour résoudre l’erreur, examinez la source de données et les formats et encodages de données qu’elle produit. Décodez la charge utile stockée dans error_data:$1 avec la fonction BASE64 _DECODE_STRING pour inspecter les octets bruts et identifier les séquences UTF-8 incorrectes.
Flux de travail de reprise d’erreur¶
L’exemple suivant montre comment interroger les erreurs, les analyser et réinsérer les données corrigées.
Interroger les erreurs récentes¶
Analyser la distribution des erreurs¶
Corriger et réinsérer des erreurs récupérables¶
Pour les erreurs avec charges utiles JSON valides, vous pouvez analyser, corriger et réinsérer les données :
Après avoir retraité les erreurs avec succès, vous pouvez tronquer la table des erreurs :
Facturation¶
L’ingestion de Snowpipe Streaming est facturée au tarif standard de Snowpipe Streaming. L’activation de la journalisation des erreurs ne modifie pas vos coûts d’ingestion. Il n’y a pas de frais d’ingestion supplémentaires pour le routage des lignes ayant échoué vers la table d’erreurs.
Snowflake facture les données stockées dans la table d’erreur au tarif de stockage standard, comme n’importe quelle autre table. La table des erreurs stocke les métadonnées brutes de la charge utile et des erreurs pour chaque ligne ayant échoué.
Pour plus d’informations sur les coûts de Snowpipe Streaming, voir:doc:/user-guide/snowpipe-streaming/snowpipe-streaming-high-performance-cost.
Limitations¶
Les tables d’erreurs capturent les erreurs qui se produisent pendant le traitement des données côté serveur (analyse et transformation). Les erreurs dans d’autres zones de préparation (validation SDK, défaillances d’API et autres erreurs asynchrones côté serveur) ne sont pas prises en compte dans les tables d’erreurs. Surveillez les erreurs asynchrones côté serveur à l’aide de getChannelStatus ().
Un taux d’échec élevé des lignes entrantes peut augmenter la latence de traitement en raison de la surcharge du stockage des informations d’erreur.
Les charges utiles supérieures à 128 MB sont tronquées. Le champ
error_data_truncatedindique quand la troncation s’est produite.Les tables d’erreurs ne sont disponibles que pour l’architecture hautes performances de Snowpipe Streaming. Pour l’architecture classique, la gestion des erreurs est gérée côté client par l’intermédiaire du SDK.