Bemærk
Adgang til denne side kræver godkendelse. Du kan prøve at logge på eller ændre mapper.
Adgang til denne side kræver godkendelse. Du kan prøve at ændre mapper.
Gælder for:✅ Warehouse i Microsoft Fabric
Denne artikel beskriver, hvordan man fejlsøger indlæsningsfejl i T-SQL-indlæsningsmønstre.
Indlæsning i et lager ved brug af COPY INTO, BULK INSERT, funktion OPENROWSET i CTAS, INSERT, UPDATE, og -sætninger MERGE kan fejle af flere årsager. Kildefilværdier kan muligvis ikke matche tabellens skema. Nødvendige værdier kan mangle. Indtagelsesmuligheder kan også være forkert konfigureret.
Denne fejlfinding guide bruger diagnostiske oplysninger om afviste rækker til at løse fejl, fange fejl på rækkeniveau og inspicere afviste rækker med fejlmetadata.
Ved at undersøge fejlfilerne, der genereres af COPY INTO og andre indtastningskommandoer, kan du præcist fastslå, hvilke rækker der ikke blev indlæst, og hvorfor. Disse oplysninger hjælper dig med at identificere datakvalitetsproblemer eller justere indtagelsesindstillinger, rette kildedataene og køre belastningen igen med sikkerhed.
Vigtigt!
Disse instruktioner gælder kun for at indlæse CSV- eller JSONL-filer ved at bruge Transact-SQL kommandoer (COPY INTO, BULK INSERT, og DML med OPENROWSET funktion). Outputfiler til afviste rækker genereres ikke til eksterne inputværktøjer (såsom pipelines ), Parquet-filer eller ved indlæsning af data fra SQL analytics-endpoint.
Opret måltabellen
Før du kører indlæsningskommandoer, skal du oprette en destinationstabel med strenge typer og NOT NULL begrænsninger, så du tidligt opdager konverterings- og datakvalitetsproblemer.
Åbn dit lager-arbejdsområde i dit lager.
På fanen Hjem vælger du Ny SQL-forespørgsel.
Kør følgende sætning:
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 bruge flere understøttede metoder, herunder at indlæse med COPY INTO eller at indlæse med Transact-SQL. Vælg den indtagelsesmetode, der bedst passer til dine krav til datakilde, format og automatisering. Følgende COPY INTO-eksempel illustrerer et almindeligt indlæsningsmønster til indlæsning af data fra eksterne filer i en tabel.
COPY INTO [dbo].[TaxiTrips]
FROM 'https://{storage-path}.blob.core.windows.net/Files/yellow/'
WITH ( FILE_TYPE = 'CSV' );
Denne sætning kan fejle i at indtage data, hvis kildefilerne ikke matcher destinationstabellens skema. Almindelige årsager inkluderer uoverensstemmende kolonneantal, inkompatible datatyper eller værdier, der ikke kan gemmes i måltabellen. Hvis indlæsning støder på værdier, der ikke kan konverteres til destinationsskemaet, returnerer sætningen en fejl, der 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 fejl indikerer, at en eller flere rækker ikke kan konverteres til destinationskolonnetyperne.
Undersøg fejl med MAXERRORS og ERRORFILE
Brug følgende muligheder til at fortsætte indlæsningen, når antallet af fejl på rækkeniveau er under en defineret tærskel, og for at gemme diagnostiske detaljer et angivet sted.
-
MAXERRORSfastsætter det maksimale antal tolererede rækkeniveaufejl under indtagelse. -
ERRORFILEangiver, hvor databasen skriver afviste rækker og fejldetaljer.
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/'
);
Vigtigt!
Konfigurer ERRORFILE under samme lagringsplacering, som bruges til kilde-fil-læsninger, ikke i en anden lagringskonto. Identiteten, der bruges til at tilgå kildedata, skal også have tilladelser til at oprette mapper og filer i den konfigurerede fejlsti.
Belastningsoperationen lykkes kun, når antallet af afviste rækker er lavere end MAXERRORS. Når fejl opfanges, skriver indlæsningsoperationen:
-
error.jsonlfor strukturerede diagnostiske metoder -
row.csvfor afviste kilde-rækker
Find og forespørg afviste rækker
Databasen skriver fejlinformation til et struktureret mappehierarki under den konfigurerede fejlplacering. Disse mapper hjælper dig med at spore en specifik udførelse og korrelere diagnostik til én indlæsningssætning:
ERRORFILE/
+-- _rejectedrows/
+-- <timestamp>/
+-- <statement_id>/
+-- error.jsonl
+-- row.csv or rows.jsonl
Brug OPENROWSET den til at læse de strukturerede diagnostiske linjer ind error.jsonl , så du kan identificere, hvilken værdi der fejlede, hvilken destinationskolonne der blev påvirket, og hvor den fejlende række stammer fra:
SELECT *
FROM OPENROWSET(
BULK 'https://{storage-path}.blob.core.windows.net/Files/yellow/_rejectedrows/*/*/error.jsonl'
);
Resultatsættet indeholder typisk én række pr. afvist post, for eksempel:
| Fejl | Column | Kolonnenavn | Værdi | IsOutputted | Fil | ErrorRowLocation |
|---|---|---|---|---|---|---|
| Datakonverteringsfejl | 1 | vendorID |
vendorID |
1 | https://.../yellow/tripdata.csv |
0 |
| NULL i ikke-nullbar kolonne | 1 | vendorID |
NUL | 1 | https://.../yellow/ytripdata.csv |
399 |
| Datakonverteringsfejl | 6 | passengerCount |
Ikke tilgængelig | 1 | https://.../yellow/yellow_tripdata.csv |
519 |
Filen error.jsonl indeholder ét JSON-objekt pr. linje. Hvert objekt indeholder de egenskaber, der er angivet i den foregående tabel. Følgende tabel beskriver hver egenskab i detaljer.
| Column | Beskrivelse |
|---|---|
Error |
Giver fejlmeddelelsen, der forklarer, hvorfor værdien blev afvist under indlæsning. |
Column |
Angiver indekset for kolonnen i kilde-CSV-filen, der indeholder værdien, som ikke kunne indlæses. Kolonneindeksering starter ved for 1 den første kolonne. |
ColumnName |
Angiver navnet på den kolonne i destinationstabellen, hvor værdien ikke kunne gemmes. |
Value |
Kildeværdi, der ikke kunne konverteres eller valideres. |
IsOutputted |
Angiver om rækken fra kildefilen, der indeholder den rapporterede fejl, også skrives til outputfilen for de afviste rækker (row.csvrow.jsonleller ). En værdi af 1 (eller true i JSONL-filer) betyder, at rækken er skrevet i error.csv, og en værdi af 0 (eller false i JSONL-filerne) betyder, at den ikke er det. |
File |
Identificerer kildefilen, hvorfra den afviste række stammer. Denne værdi hjælper dig med at spore de afviste data tilbage til den oprindelige inputfil til undersøgelse. |
ErrorRowLocation |
Byte-offset-positionen i kildefilen, hvor fejlen opstod. |
Anmeldelse af afviste rækker
Efter du har gennemgået de strukturerede diagnostiske oplysninger, kan du inspicere de oprindelige kildedata, som databasen ikke kunne indlæse. De afviste rækker indeholder kopier af kildeposterne, bevaret præcis, som de fremstod i inputfilerne. Diagnostikken for afviste rækker genererer filer, der kun indeholder de poster, der fejlede indtastningen:
- Hvis du indlæser CSV-filer ved at bruge
COPY INTO (FILE_TYPE = 'CSV'), indeholder det afviste output enrow.csvfil. Denne fil matcher kildefilstrukturen og indeholder de oprindelige CSV-rækker med ugyldige værdier. - Hvis du indlæser JSONL-filer ved at bruge
OPENROWSET(FORMAT = 'JSONL'), indeholder det afviste output enrow.jsonlfil. Denne fil bevarer de oprindelige JSON-objekter, der forårsagede indtastningsfejl.
Brug disse filer til at validere rodårsagen til fejlene, såsom fejldannede værdier, uventede NULL værdier eller header-rækker, der fejlagtigt blev parset som data.
SELECT *
FROM OPENROWSET(
BULK 'https://{storage-path}.blob.core.windows.net/Files/yellow/_rejectedrows/*/*/row.csv'
);
Skemaet row.csv matcher kildens CSV-form, og det indeholder kun rækker, der fejlede indtastning.
Eksempel på output med afviste rækker:
C1 |
C2 |
C3 |
C4 |
C5 |
C6 |
C7 |
C8 |
C9 |
C10 |
|---|---|---|---|---|---|---|---|---|---|
vendorID |
startLat |
startLon |
endLat |
endLon |
passengerCount |
tripDistance |
fareAmount |
mtaTax |
totalAmount |
| NUL | 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 tilgængelig | 1.80 | 11.00 | 0.50 | 15.90 |
Baseret på disse diagnostiske oplysninger kan du identificere følgende indtagelsesproblemer:
- Header-rækken i kildefilen bliver fejlagtigt parset som en datarække. For at løse
COPY INTOdet bør udtoget bruge mulighedenFIRSTROW = 2. - En række i kildefilen for kolonnen
vendorID(C1) indeholderNULLværdier, men den tilsvarende kolonne i destinationstabellenTaxiTripser defineret somNOT NULL. - En række i kildefilen for kolonnen
passengerCountindeholder en ugyldig værdi (N/A), som ikke kan konverteres til destinationskolonnen int .
Bemærkning
Den samme proces gælder, når du undersøger afviste rækker fra JSONL-input. Brug row.jsonl filen til at inspicere de afviste poster.
Ret indtastningsproblemer og genindtast data
Når du har identificeret årsagen til indtagelsesfejl, skal du rette problemet og genindsamle de berørte data. Udbedringsmetoden afhænger af, hvor fejlen opstår.
Ret destinationstabellens skema
Hvis kildedataene ikke overholder skemaet for destinationstabellen, skal tabeldefinitionen opdateres. Almindelige rettelser inkluderer ændring af kolonnedatatyper eller fjernelse af restriktive begrænsninger såsom NOT NULL.
I nogle scenarier kan det være nødvendigt at fjerne og genskabe destinationstabellen, før du genindlæser dataene.
Korrekt kildedata og genindtast filer
Hvis indlæsningen fejler på grund af ugyldige eller inkonsistente værdier i kildefilerne, skal du rette disse værdier og genindtage dataene. For eksempel kan du erstatte pladsholderværdier som for eksempel N/A med tomme værdier eller gyldige standardindstillinger.
COPY INTO [dbo].[TaxiTrips]
FROM 'https://{storage-path}.blob.core.windows.net/Files/yellow/tripdata_corrected.csv'
WITH ( FILE_TYPE = 'CSV' );
Når du genindtager korrigerede data, brug en eksplicit filsti, der peger til den nye fil, der kun indeholder korrigerede data, i stedet for en mappesti, der refererer til de oprindelige filer. Denne tilgang forhindrer genindlæsning af rækker, der tidligere er blevet indlæst med succes, og undgår duplikerede data.
Genbearbejder afviste rækker ved at bruge en staging-tabel
Du kan indlæse afviste rækker i en staging-tabel, rette dataene ved at bruge Transact-SQL dataændringssætninger og derefter genindlæse de korrigerede rækker.
Følgende CREATE TABLE AS SELECT udsagn indlæser afviste rækker i en tabel til videre behandling:
CREATE TABLE TaxiTrip_RejectedRows AS
SELECT *
FROM OPENROWSET(
BULK 'https://{storage-path}.blob.core.windows.net/Files/yellow/_rejectedrows/*/*/row.csv'
);
Når du har rettet dataene, indsæt de rensede rækker i destinationstabellen.