Merk
Tilgang til denne siden krever autorisasjon. Du kan prøve å logge på eller endre kataloger.
Tilgang til denne siden krever autorisasjon. Du kan prøve å endre kataloger.
Gjelder for:✅ Warehouse i Microsoft Fabric
Denne artikkelen beskriver hvordan man feilsøker inntastingsfeil i T-SQL-inntastingsmønstre.
Inntasting i et lager ved bruk av COPY INTO, BULK INSERT, funksjon OPENROWSET i CTAS, INSERT, UPDATE, og MERGE setninger kan feile av flere grunner. Kildefilverdiene kan ikke samsvare med tabellskjemaet. Nødvendige verdier kan mangle. Inntaksalternativene kan også være feilkonfigurert.
Denne feilsøkingsguiden bruker diagnostikkinformasjonen for avviste rader til å løse feil, fange opp radnivåfeil og inspisere avviste rader med feilmetadata.
Ved å undersøke feilfilene generert av COPY INTO og andre inntastingskommandoer, kan du nøyaktig finne ut hvilke rader som ikke ble innhentet og hvorfor. Denne informasjonen hjelper deg å identifisere datakvalitetsproblemer eller justere inntastingsinnstillinger, rette kildedataene og kjøre belastningen på nytt med trygghet.
Important
Disse instruksjonene gjelder kun for innhenting av CSV- eller JSONL-filer ved å bruke Transact-SQL kommandoer (COPY INTO, BULK INSERT, og DML med OPENROWSET funksjon). Utdatafiler for avviste rader genereres ikke for eksterne inntastingsverktøy (som pipelines ), Parquet-filer eller når data tas inn fra SQL-analyse-endpoint.
Opprett måltabellen
Før du kjører inntastingskommandoer, lag en destinasjonstabell med strenge typer og NOT NULL begrensninger slik at du oppdager konverterings- og datakvalitetsproblemer tidlig.
Åpne lageret ditt i arbeidsområdet ditt.
På Hjem-fanen velger du Ny SQL-spørring.
Kjør følgende uttalelse:
DROP TABLE IF EXISTS dbo.TaxiTrips; GO CREATE TABLE dbo.TaxiTrips ( vendorID int NOT NULL, startLat float NOT NULL, startLon float NOT NULL, endLat float NOT NULL, endLon float NOT NULL, passengerCount int NOT NULL, tripDistance float NOT NULL, fareAmount float NOT NULL, mtaTax float NOT NULL, totalAmount float NOT NULL );
Du kan bruke flere støttede metoder, inkludert innlevering med COPY INTO eller innlevering med Transact-SQL. Velg den innsamlingsmetoden som passer best til dine behov for datakilde, format og automatisering. Følgende COPY INTO-eksempel illustrerer et vanlig inntastingsmønster for lasting av data fra eksterne filer inn i en tabell.
COPY INTO [dbo].[TaxiTrips]
FROM 'https://{storage-path}.blob.core.windows.net/Files/yellow/'
WITH ( FILE_TYPE = 'CSV' );
Denne setningen kan feile i å ta inn data hvis kildefilene ikke samsvarer med destinasjonstabellens skjema. Vanlige årsaker inkluderer uoverensstemmende kolonneantall, inkompatible datatyper eller verdier som ikke kan lagres i måltabellen. Hvis inntak møter verdier som ikke kan konverteres til destinasjonsskjemaet, returnerer setningen en feil som ligner følgende:
Msg 13812, Level 16, State 1, Line 2
Bulk load data conversion error (type mismatch or invalid character for the specified codepage)
for row starting at byte offset 0, column 1 (vendorID).
Underlying data description:
file 'https://....blob.core.windows.net/Files/yellow/tripdata.csv'.
Denne feilen indikerer at én eller flere rader ikke kan konverteres til destinasjonskolonnetypene.
Undersøk feil med MAXERRORS og ERRORFILE
Bruk følgende alternativer for å fortsette inntastingen når antallet radfeiltrinn er under en definert terskel, og for å lagre diagnostiske detaljer på et spesifisert sted.
-
MAXERRORSsetter maksimalt antall tolererte radnivåfeil under inntak. -
ERRORFILEspesifiserer hvor databasen skriver avviste rader og feildetaljer.
COPY INTO [dbo].[TaxiTrips]
FROM 'https://{storage-path}.blob.core.windows.net/Files/yellow/'
WITH (
FILE_TYPE = 'CSV',
MAXERRORS = 10,
ERRORFILE = 'https://{storage-path}.blob.core.windows.net/Files/yellow/'
);
Important
Konfigurer ERRORFILE under samme lagringssted som brukes for kilde-fil-lesing, ikke i en annen lagringskonto. Identiteten som brukes for å få tilgang til kildedata må også ha tillatelser til å opprette mapper og filer i den konfigurerte feilstien.
Lastoperasjonen lykkes bare når antallet avviste rader er lavere enn MAXERRORS. Når feil fanges opp, skriver inntastingsoperasjonen:
-
error.jsonlfor strukturerte diagnostiske tester -
row.csvfor avviste kilderader
Finn og søk i avviste rader
Databasen skriver feilinformasjon til et strukturert mappehierarki under den konfigurerte feilplasseringen. Disse mappene hjelper deg med å spore en spesifikk utførelse og korrelere diagnostikk til én inntakssetning:
ERRORFILE/
+-- _rejectedrows/
+-- <timestamp>/
+-- <statement_id>/
+-- error.jsonl
+-- row.csv or rows.jsonl
Bruk OPENROWSET den til å lese inn de strukturerte diagnostikkene error.jsonl slik at du kan identifisere hvilken verdi som feilet, hvilken destinasjonskolonne som ble påvirket, og hvor den feilende raden kom fra:
SELECT *
FROM OPENROWSET(
BULK 'https://{storage-path}.blob.core.windows.net/Files/yellow/_rejectedrows/*/*/error.jsonl'
);
Resultatsettet inkluderer vanligvis én rad per avvist post, for eksempel:
| Error | Column | ColumnName | Verdi | IsOutputted | Fil | ErrorRowLocation |
|---|---|---|---|---|---|---|
| Datakonverteringsfeil | 1 | vendorID |
vendorID |
1 | https://.../yellow/tripdata.csv |
0 |
| NULL i en ikke-nullbar kolonne | 1 | vendorID |
NULL | 1 | https://.../yellow/ytripdata.csv |
399 |
| Datakonverteringsfeil | 6 | passengerCount |
Ikke tilgjengelig | 1 | https://.../yellow/yellow_tripdata.csv |
519 |
Filen error.jsonl inneholder ett JSON-objekt per linje. Hvert objekt inkluderer egenskapene som er listet i tabellen før. Tabellen nedenfor beskriver hver egenskap i detalj.
| Column | Beskrivelse |
|---|---|
Error |
Gir feilmeldingen som forklarer hvorfor verdien ble avvist under inntasting. |
Column |
Angir indeksen til kolonnen i kilde-CSV-filen som inneholder verdien som ikke kunne importeres. Kolonneindeksering starter ved 1 for den første kolonnen. |
ColumnName |
Spesifiserer navnet på destinasjonstabellkolonnen der verdien ikke kunne lagres. |
Value |
Kildeverdi som ikke kunne konverteres eller valideres. |
IsOutputted |
Indikerer om raden fra kildefilen som inneholder den rapporterte feilen også skrives til den avviste radens utdata (row.csvrow.jsonleller ). En verdi av 1 (eller true i JSONL-filer) betyr at raden er skrevet i error.csv, og en verdi i 0 (eller false i JSONL-filene) betyr at den ikke er det. |
File |
Identifiserer kildefilen som den avviste raden stammer fra. Denne verdien hjelper deg å spore de avviste dataene tilbake til den opprinnelige inndatafilen for undersøkelse. |
ErrorRowLocation |
Byte-offset-posisjon i kildefilen der feilen oppsto. |
Anmeldelse av avviste rader
Etter at du har gjennomgått den strukturerte diagnostiske informasjonen, kan du inspisere de opprinnelige kildedataene som databasen ikke kunne ta inn. De avviste radene inneholder kopier av kildepostene, bevart nøyaktig slik de dukket opp i inndatafilene. Diagnostikken for de avviste radene genererer filer som kun inneholder de postene som mislyktes i inntastingen:
- Hvis du innfører CSV-filer ved å bruke
COPY INTO (FILE_TYPE = 'CSV'), inkluderer den avviste utdataen enrow.csvfil. Denne filen samsvarer med kildefilstrukturen og inneholder de originale CSV-radene med ugyldige verdier. - Hvis du importerer JSONL-filer ved å bruke
OPENROWSET(FORMAT = 'JSONL'), inkluderer den avviste utdataen enrow.jsonlfil. Denne filen bevarer de opprinnelige JSON-objektene som forårsaket inntastingsfeil.
Bruk disse filene til å validere rotårsaken til feilene, som feilformede verdier, uventede NULL verdier eller headerrader som feiltolket som data.
SELECT *
FROM OPENROWSET(
BULK 'https://{storage-path}.blob.core.windows.net/Files/yellow/_rejectedrows/*/*/row.csv'
);
Skjemaet row.csv samsvarer med kildens CSV-form, og det inneholder kun rader som mislyktes ved inntasting.
Eksempel på avviste rad-utdata:
C1 |
C2 |
C3 |
C4 |
C5 |
C6 |
C7 |
C8 |
C9 |
C10 |
|---|---|---|---|---|---|---|---|---|---|
vendorID |
startLat |
startLon |
endLat |
endLon |
passengerCount |
tripDistance |
fareAmount |
mtaTax |
totalAmount |
| NULL | 40.7484 | -73.9857 | 40.7549 | -73.9840 | 2 | 1.40 | 9.00 | 0.50 | 13.20 |
| 1 | 40.7216 | -74.0047 | 40.7359 | -74.0036 | Ikke tilgjengelig | 1.80 | 11.00 | 0.50 | 15.90 |
Basert på denne diagnostiske informasjonen kan du identifisere følgende inntaksproblemer:
- Header-raden i kildefilen blir feilaktig tolket som en datarad. For å løse
COPY INTOdette bør uttalelsen bruke alternativetFIRSTROW = 2. - En rad i kildefilen for kolonnen
vendorID(C1) inneholderNULLverdier, men den tilsvarende kolonnen i destinasjonstabellenTaxiTripser definert somNOT NULL. - En rad i kildefilen for kolonnen
passengerCountinneholder en ugyldig verdi (N/A) som ikke kan konverteres til destinasjonskolonnen int .
Bemerkning
Den samme prosessen gjelder når du undersøker avviste rader fra JSONL-input. Bruk row.jsonl filen til å inspisere de avviste postene.
Fiks inntastingsproblemer og ta inn data på nytt
Etter at du har identifisert årsaken til inntaksfeilene, korriger problemet og importer de berørte dataene på nytt. Utbedringsmetoden avhenger av hvor feilen oppstår.
Fiks destinasjonstabellens skjema
Hvis kildedataene ikke samsvarer med destinasjonstabellens skjema, oppdater tabelldefinisjonen. Vanlige løsninger inkluderer å endre kolonnedatatyper eller fjerne restriktive begrensninger som NOT NULL.
I noen tilfeller kan det hende du må fjerne og lage destinasjonstabellen på nytt før du importerer dataene på nytt.
Korriger kildedata og ta inn filer på nytt
Hvis inntastingen feiler på grunn av ugyldige eller inkonsistente verdier i kildefilene, korriger disse verdiene og innta dataene på nytt. For eksempel, bytt ut plassholderverdier som N/A med tomme verdier eller gyldige standardinnstillinger.
COPY INTO [dbo].[TaxiTrips]
FROM 'https://{storage-path}.blob.core.windows.net/Files/yellow/tripdata_corrected.csv'
WITH ( FILE_TYPE = 'CSV' );
Når du tar inn korrigerte data på nytt, bruk en eksplisitt filsti som peker til den nye filen som kun inneholder korrigerte data, i stedet for en mappesti som refererer til de opprinnelige filene. Denne tilnærmingen forhindrer at rader som tidligere ble lastet inn på nytt, og unngår dupliserte data.
Behandle avviste rader på nytt ved å bruke en staging-tabell
Du kan laste inn avviste rader i en staging-tabell, fikse dataene ved å bruke Transact-SQL dataendringssetninger, og deretter importere de korrigerte radene på nytt.
Følgende CREATE TABLE AS SELECT setning laster avviste rader inn i en tabell for videre behandling:
CREATE TABLE TaxiTrip_RejectedRows AS
SELECT *
FROM OPENROWSET(
BULK 'https://{storage-path}.blob.core.windows.net/Files/yellow/_rejectedrows/*/*/row.csv'
);
Etter at du har korrigert dataene, sett inn de rensede radene i destinasjonstabellen.