Problembehandlung beim Massenladen von Daten¶
Dieses Thema beschreibt einen methodischen Ansatz zur Behebung von Problemen beim Laden von Massendaten.
Unter diesem Thema:
Datenladefehler¶
Schritt 1: Anzeigen des COPY-Verlaufs für die Tabelle¶
Fragen Sie den Verlauf der Ladeaktivitäten für eine Tabelle ab. Weitere Informationen dazu finden Sie unter COPY_HISTORY. In der Spalte STATUS
wird gezeigt, ob ein bestimmter Satz von Dateien geladen, teilweise geladen oder nicht geladen wurde. Die Spalte FIRST_ERROR_MESSAGE
bietet einen Hinweis auf die Ursache, warum ein Ladeversuch nur teilweise erfolgreich war oder fehlgeschlagen ist.
Beachten Sie, dass bei mehreren Problemen mit einer Menge von Dateien die Spalte FIRST_ERROR_MESSAGE
nur den ersten aufgetretenen Fehler anzeigt. Um alle Fehler in den Dateien anzuzeigen, finden Sie unter Schritt 2: Validieren des Datenladens eine entsprechende Anleitung.
Schritt 2: Validieren des Datenladens¶
Mit der Kopieroption VALIDATION_MODE wird die COPY-Anweisung angewiesen, die zu ladenden Daten zu validieren und Ergebnisse auf Basis der angegebenen Validierungsoption zurückzugeben. Bei Angabe dieser Kopieroption werden keine Daten geladen. Weitere Informationen zur Kopieroption finden Sie unter COPY INTO <Tabelle>.
Führen Sie eine COPY-Anweisung aus, wobei die Kopieroption VALIDATION_MODE auf RETURN_ALL_ERRORS
gesetzt ist. Verweisen Sie in der Anweisung auf den Satz von Dateien, den Sie zu laden versucht haben.
Im folgenden Beispiel werden Dateien, die Fehler enthalten, validiert. Um die Analyse der Fehler zu erleichtern, lädt eine COPY INTO <Speicherort>-Anweisung dann die problematischen Datensätze in eine Textdatei, damit sie analysiert und in den Originaldateien behoben werden können. Die Anweisung fragt die Tabellenfunktion RESULT_SCAN ab, um die Datensätze abzurufen. Beachten Sie, dass die Anweisungen in diesem Abschnitt nacheinander ausgeführt werden müssen, um die entsprechenden Datensätze mit der Funktion LAST_QUERY_ID abzurufen.
COPY INTO mytable
FROM @mystage/myfile.csv.gz
VALIDATION_MODE=RETURN_ALL_ERRORS;
SET qid=last_query_id();
COPY INTO @mystage/errors/load_errors.txt FROM (SELECT rejected_record FROM TABLE(result_scan($qid)));
Andere Probleme¶
Error: Integration {0}
associated with the stage {1}
cannot be found¶
003139=SQL compilation error:\nIntegration ''{0}'' associated with the stage ''{1}'' cannot be found.
Dieser Fehler kann auftreten, wenn die Zuordnung zwischen dem externen Stagingbereich und der mit dem Stagingbereich verknüpften Speicherintegration unterbrochen wurde. Dies geschieht, wenn das Speicherintegrationsobjekt neu erstellt wurde (mithilfe von CREATE OR REPLACE STORAGE INTEGRATION). Ein Stagingbereich ist mit einer Speicherintegration verknüpft, wobei anstelle des Namens der Speicherintegration eine ausgeblendete ID verwendet wird. Im Hintergrund löscht die CREATE OR REPLACE-Syntax das Objekt und erstellt es mit einer anderen verborgenen ID neu.
Wenn Sie eine Speicherintegration neu erstellen müssen, nachdem diese mit einer oder mehreren Stagingbereichen verknüpft wurde, müssen Sie die Zuordnung zwischen einem Stagingbereich und der Speicherintegration neu einrichten, indem Sie ALTER STAGE stage_name
SET STORAGE_INTEGRATION = storage_integration_name
ausführen, wobei:
stage_name
ist der Name des Stagingbereichs.storage_integration_name
ist der Name der neuen Speicherintegration.
Mit CURRENT_TIMESTAMP eingefügte Ladezeiten liegen vor LOAD_TIME-Werten der COPY_HISTORY-Ansicht¶
Tabellendesigner können eine Zeitstempelspalte hinzufügen, die den aktuellen Zeitstempel als Standardwert einfügt, wenn Datensätze in eine Tabelle geladen werden. Dadurch kann die Zeit erfasst werden, zu der jeder Datensatz in die Tabelle geladen wurde, jedoch liegen die Zeitstempel vor den LOAD_TIME-Spaltenwerten, die von der COPY_HISTORY-Funktion (Information Schema) oder der COPY_HISTORY-Ansicht (Account Usage) zurückgegeben werden. Der Grund dafür ist, dass CURRENT_TIMESTAMP ausgewertet wird, wenn der Ladevorgang in den Clouddiensten kompiliert wird, und nicht, wenn der Datensatz in die Tabelle eingefügt wird (d. h., wenn die Transaktion für die Ladeoperation mit Commit bestätigt wird).
Es wird empfohlen, stattdessen METADATA$START_SCAN_TIME einzufügen und abzufragen, wodurch eine genauere Darstellung der zu ladenden Menge an Datensätzen bereitgestellt wird.