Fehlerprotokollierung in Snowpipe Streaming mit High-Performance-Architektur¶
Die Fehlerprotokollierung für Snowpipe Streaming baut auf dem DML-Fehlerprotokollierungs-Feature von Snowflake auf und bietet eine robuste Möglichkeit, Datenaufnahmefehler zu verwalten und zu beheben. Dieses Feature verhindert den stillschweigenden Datenverlust und erhöht die Sichtbarkeit von fehlerhaften Datenzeilen. Wenn die Fehlerprotokollierung aktiviert ist, werden fehlerlose Daten weiterhin in Ihre Zieltabelle geladen, während Zeilen, deren Verarbeitung fehlschlägt, automatisch zur Überprüfung und Wiederherstellung an eine spezielle Fehlertabelle weitergeleitet werden.
Wichtig
Die in den Fehler-Tabellen gespeicherten Daten entsprechen der ursprünglichen Nutzlast, die an die API oder das SDK gesendet wurde, bevor Pipe-Transformationen angewendet werden. Auch wenn Ihre Pipe Felder löscht oder umwandelt, bleibt die volle ursprüngliche Nutzlast in der Fehlertabelle erhalten.
Übersicht¶
Wenn Sie die leistungsstarke Snowpipe Streaming-Architektur verwenden, erfolgt die Datenverarbeitung serverseitig in Snowflake. Die High-Performance-Architektur arbeitet implizit im ON_ERROR = CONTINUE-Modus, d. h., gültige Zeilen werden aufgenommen, während problematische Zeilen übersprungen werden.
Optionen zur Fehlerbehandlung¶
Sie können Datenaufnahmefehler auf folgende Weise überwachen und behandeln:
Ohne Fehlertabellen:
Verwenden Sie getChannelStatus() zur Überwachung der aggregierter Fehleranzahl, der letzten Fehlermeldung und des Zeitstempels des letzten Fehlers.
Fragen Sie die SNOWPIPE_STREAMING_CHANNEL_HISTORY-Ansicht auf historische Fehlertrends und -muster ab.
Diese Methoden zeigen Ihnen, dass Fehler aufgetreten sind und wie viele, jedoch nicht, welche Zeilen fehlgeschlagen sind oder welche Nutzdaten sie enthalten.
Mit Fehlertabellen:
Zeilen, deren Verarbeitung fehlschlägt, werden automatisch in einer speziellen Fehlertabelle erfasst.
Jede Fehlerzeile enthält die vollständige ursprüngliche Nutzlast und detaillierte Fehlermetadaten.
Sie können fehlgeschlagene Zeilen mit Standard-SQL abfragen, analysieren und erneut verarbeiten.
Fehlertabellen vervollständigen das Bild, indem sie Ihnen genau anzeigen, welche Zeilen fehlgeschlagen sind und warum, und ermöglichen so ein vollständiges Debugging und Wiederherstellung.
Aktivieren Sie die Fehlerprotokollierung¶
Um die Fehlerprotokollierung für Snowpipe Streaming zu aktivieren, setzen Sie die ERROR_LOGGING-Eigenschaft in der Zieltabelle fest. Vollständige Informationen zum Aktivieren und Konfigurieren der Fehlerprotokollierung finden Sie unter DML-Fehlerprotokollierung für eine Tabelle konfigurieren.
Wenn die Fehlerprotokollierung aktiviert ist, erfasst dieselbe Fehler-Tabelle Fehler sowohl aus DML-Statements als auch aus Snowpipe Streaming-Datenaufnahme-Workloads.
Fehlertabellen abfragen¶
Um die Fehlertabelle für eine Basistabelle abzufragen, verwenden Sie die``ERROR_TABLE``-Tabellenfunktion. Vollständige Informationen zum Schema der Fehler-Tabellen, zu Zugriffskontrollen und unterstützten Operationen finden Sie unter Fehlerprotokollierung und Fehlertabellen.
Das Ergebnis enthält eine Zeile für jede fehlerhafte Zeile im Erfassungsstream.
Snowpipe Streaming-Fehlerfelder¶
Snowpipe Streaming-Fehler werden in denselben Fehlertabellenspalten wie DML-Fehler (timestamp, query_id, error_code, error_metadata, error_data) gespeichert. Die error_metadata- und``error_data``-Objekte enthalten zusätzliche Felder für Snowpipe Streaming, die in den folgenden Abschnitten beschrieben werden.
Identifizieren von Snowpipe Streaming-Fehlern¶
Das error_metadata:service-Feld wird für Fehler aus Snowpipe Streaming mit snowpipe_streaming befüllt. Verwenden Sie dieses Feld, um Fehler nach Quelle zu filtern:
Details zu Fehlermetadaten¶
Bei Fehlern aus Snowpipe Streaming enthält das error_metadata:details-Objekt die folgenden zusätzlichen Felder:
Feld |
Beschreibung |
|---|---|
|
Name der Pipe, die zum Erfassen der fehlerhaften Zeile verwendet wird. |
|
Name des Kanals, der zum Erfassen der fehlerhaften Zeile verwendet wird. |
|
Oberes Begrenzungs-Offset-Token, das die fehlerhafte Zeile enthält. Die Zeile wird in der Nutzlast mit diesem Offset-Token oder früher angezeigt. |
|
Gibt an, ob die Rohnutzlast abgeschnitten wurde, um in die Fehlertabelle zu passen (maximal 128 MB). |
|
Gibt den Typ des in der:code: |
Fehlerdatenformat¶
Bei Fehlern aus Snowpipe Streaming enthält das error_data:$1-Feld die rohe Nutzlast, die die fehlerhafte Zeile repräsentiert.
Wenn die Nutzlast ungültige UTF-8-Zeichen enthält wird die Rohnutzlast als base64-codierte binäre Zeichenfolge gespeichert.
Inhaltstypen der Fehlerdaten¶
Das error_data_content_type-Feld gibt den Typ des aufgetretenen Fehlers an und schlägt Schritte zur Behebung vor.
json¶
Die fehlerhafte Zeile ist ein syntaktisch gültiger JSON-String, jedoch ist beim Laden der Daten in die Zieltabelle ein logischer Fehler aufgetreten.
Zu den häufigsten logischen Fehlern gehören:
Fehlgeschlagene nicht nullwertfähige Spalten: Eine erforderliche Spalte mit einer NOT NULL-Einschränkung wurde in der Nutzlast nicht angegeben.
Typkonvertierungsfehler: Der JSON-Datentyp kann nicht in den Zielspaltentyp umgewandelt werden. Zum Beispiel kann ein String-Wert
"abc"nicht in eine NUMBER-Spalte konvertiert werden.Transformationsfehler: Bei der Auswertung eines Pipe-Transformationsausdrucks, z. B. Division durch Null, ist ein Fehler aufgetreten.
Um das Problem zu beheben, überprüfen Sie die Fehlermeldung in:code:error_metadata:error_message und den Spaltennamen in:code:error_metadata:error_source, die den Datenaufnahmefehler verursacht haben. Parsen Sie die Nutzlast mit PARSE_JSON(error_data:$1), korrigieren Sie die Daten und fügen Sie sie anschließend erneut in die Zieltabelle ein.
json-invalid¶
Ein syntaktisch ungültiges JSON-Objekt wurde aufgenommen.
Um das Problem zu beheben, überprüfen Sie die Fehlermeldung in:code:error_metadata:error_message, die Details zum Syntaxfehler enthält. Korrigieren Sie die in error_data:$1 gespeicherte Nutzlast, und fügen Sie sie erneut in die Zieltabelle ein.
binary-base64¶
Ungültige UTF-8-Daten wurden aufgenommen. Die Fehlernutzlast wird in der Fehlertabelle als base64-codierte binäre Zeichenfolge gespeichert.
Dieser Fehlertyp weist typischerweise auf einen Formatkonflikt oder einen Codierungsfehler in der vorgelagerten Datenquelle hin.
Um das Problem zu lösen, untersuchen Sie die Datenquelle und die von ihr erzeugten Datenformate und Codierungen. Dekodieren Sie die in error_data:$1 gespeicherte Nutzlast mit der Funktion BASE64_DECODE_STRING, um die Rohbytes zu untersuchen und fehlerhafte UTF-8-Sequenzen zu identifizieren.
Workflow zur Fehlerbehebung¶
Das folgende Beispiel zeigt, wie Sie Fehler abfragen, analysieren und korrigierte Daten wieder einfügen können.
Letzte Fehler abfragen¶
Analysieren der Fehlerverteilung¶
Korrigieren und erneutes einfügen behebbarer Fehler¶
Bei Fehlern mit gültigen JSON-Nutzlasten können Sie die Daten analysieren, korrigieren und erneut einfügen:
Nachdem Sie die Fehler erfolgreich erneut verarbeitet haben, können Sie die Fehlertabelle kürzen:
Rechnungsstellung¶
Die Snowpipe Streaming-Datenaufnahme wird zum Standardtarif für Snowpipe Streaming abgerechnet. Das Aktivieren der Fehlerprotokollierung ändert nicht Ihre Kosten für die Datenaufnahme. Es fallen keine zusätzlichen Gebühren für das Routing von fehlgeschlagenen Zeilen an die Fehlertabelle an.
Snowflake berechnet für Daten, die in der Fehlertabelle gespeichert sind, die Standardspeichergebühr, wie für jede andere Tabelle auch. Die Fehlertabelle speichert die rohen Nutzdaten und Fehlermetadaten für jede fehlgeschlagene Zeile.
Weitere Informationen zu den Kosten von Snowpipe Streaming finden Sie unter:doc:/user-guide/snowpipe-streaming/snowpipe-streaming-high-performance-cost.
Einschränkungen¶
Fehlertabellen erfassen Fehler, die bei der serverseitigen Datenverarbeitung (Parsen und Transformieren) auftreten. Fehler von anderen Stagingbereichen (SDK-Validierung, API-Fehler und andere serverseitige asynchrone Fehler) werden nicht in Fehlertabellen erfasst. Überwachen Sie serverseitige asynchrone Fehler mit getChannelStatus ().
Eine hohe Fehlerrate bei eingehenden Zeilen kann die Verarbeitungslatenz aufgrund des Aufwands für das Speichern von Fehlerinformationen erhöhen.
Nutzlasten größer als 128 MB werden abgeschnitten. Das
error_data_truncated-Feld zeigt an, wann eine Kürzung vorgenommen wurde.Fehlertabellen sind nur für die leistungsstarke Snowpipe Streaming-Architektur verfügbar. Bei der klassischen Architektur wird die Fehlerbehandlung clientseitig über das SDK verwaltet.