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)));
Copy

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.
Copy

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.