Muistiinpano
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää kirjautua sisään tai vaihtaa hakemistoa.
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää vaihtaa hakemistoa.
Sovellettavissa:✅ Varasto Microsoft Fabric
Tässä artikkelissa kuvataan, miten T-SQL:n syöttökuvioiden vastaanottovirheitä voidaan ratkaista.
Varastoon siirtyminen , COPY INTO, funktiolla , UPDATEINSERTCTASja MERGE lauseilla voi epäonnistua useista syistä. OPENROWSETBULK INSERT Lähdetiedoston arvot eivät välttämättä vastaa taulukon skeemaa. Vaaditut arvot saattavat puuttua. Myös nielemisvaihtoehdot voivat olla väärin konfiguroituja.
Tämä vianetsintäopas käyttää hylättyjen rivien diagnostiikkatietoja virheiden korjaamiseen, rivitason virheiden keräämiseen ja hylättyjen rivien tarkistamiseen virhemetatietojen kanssa.
Tarkastelemalla virhetiedostoja, jotka on tuottanut COPY INTO ja muita syöttökomentoja, voit tarkasti määrittää, mitkä rivit epäonnistuivat vastaanottamaan ja miksi. Tämä tieto auttaa tunnistamaan datan laatuongelmia tai säätämään syöttöasetuksia, korjaamaan lähdedatan ja suorittamaan latauksen uudelleen luottavaisin mielin.
Tärkeää
Nämä ohjeet koskevat vain CSV- tai JSONL-tiedostojen vastaanottamista käyttämällä Transact-SQL-komentoja (COPY INTO, BULK INSERT, ja DML funktiolla OPENROWSET ). Hylättyjen rivien tulostiedostoja ei luoda ulkoisille syöttötyökaluille (kuten putkistoille ), Parquet-tiedostoille tai SQL-analytiikkapäätepisteen datan vastaanottamiseen.
Luo kohdetaulukko
Ennen kuin suoritat syöttökomentoja, luo kohdetaulu tiukoilla tyypeillä ja NOT NULL rajoituksilla, jotta tunnistat muunnos- ja tiedonlaatuongelmat ajoissa.
Avaa varastosi työtilassa.
Koti-välilehdeltä valitse Uusi SQL-kysely.
Suorita seuraava lausunto:
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 );
Voit käyttää useita tuettuja menetelmiä, kuten COPY INTO -menetelmällä taiTransact-SQL:n sisäänpääsyä. Valitse vastaanottomenetelmä, joka parhaiten sopii tietolähteeseesi, muotoosi ja automaatiovaatimuksiisi. Seuraava COPY INTO -esimerkki havainnollistaa yleistä vastaanottomallia, jossa datan lataaminen ulkoisista tiedostoista tauluun.
COPY INTO [dbo].[TaxiTrips]
FROM 'https://{storage-path}.blob.core.windows.net/Files/yellow/'
WITH ( FILE_TYPE = 'CSV' );
Tämä lause voi epäonnistua datan vastaanottamisessa, jos lähdetiedostot eivät vastaa kohdetauluskeemaa. Yleisiä syitä ovat sarakkeiden epäsopivuudet, yhteensopimattomat tietotyypit tai arvot, joita ei voi tallentaa kohdetaulukkoon. Jos vastaanotto kohtaa arvoja, joita ei voi muuntaa kohdeskeemaan, lause palauttaa virheen, joka muistuttaa seuraavaa:
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'.
Tämä virhe tarkoittaa, että yhtä tai useampaa riviä ei voi muuntaa kohdesaraketyypeiksi.
Tutki virheitä MAXERRORS- ja ERRORFILE-tiedostoissa
Käytä seuraavia vaihtoehtoja jatkaaksesi vastaanottoa, kun rivitason virheiden määrä on alle määritellyn kynnyksen ja tallentaaksesi diagnostiikkatiedot tiettyyn paikkaan.
-
MAXERRORSasettaa suurimman siedetyn rivin tason vikojen määrän vastaanoton aikana. -
ERRORFILEMäärittelee, mihin tietokanta kirjoittaa hylätyt rivit ja virhetiedot.
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/'
);
Tärkeää
Konfiguroi ERRORFILE samalle tallennuspaikalle, jota käytetään lähdetiedostojen lukemiseen, ei eri tallennustilille. Lähdedataan käytettävällä identiteetillä täytyy myös olla oikeudet luoda kansioita ja tiedostoja konfiguroidulle virhepolulle.
Latausoperaatio onnistuu vain, kun hylättyjen rivien määrä on pienempi kuin MAXERRORS. Kun virheitä havaitaan, vastaanottotoiminto kirjoittaa:
-
error.jsonlRakenteelliseen diagnostiikkaan -
row.csvhylätyille lähderiveille
Etsi ja hae hylättyjä rivejä
Tietokanta kirjoittaa virhetiedot rakenteelliseen kansiohierarkiaan konfiguroidun virhesijainnin alle. Nämä kansiot auttavat jäljittämään tietyn suorituksen ja yhdistämään diagnostiikan yhteen vastaanottolauseeseen:
ERRORFILE/
+-- _rejectedrows/
+-- <timestamp>/
+-- <statement_id>/
+-- error.jsonl
+-- row.csv or rows.jsonl
Käytä OPENROWSET rakenteellisen diagnostiikan lukemiseen error.jsonl , jotta voit tunnistaa, mikä arvo epäonnistui, mikä kohdesarake vaurioitui ja mistä epäonnistunut rivi on lähtöisin:
SELECT *
FROM OPENROWSET(
BULK 'https://{storage-path}.blob.core.windows.net/Files/yellow/_rejectedrows/*/*/error.jsonl'
);
Tulosjoukko sisältää tyypillisesti yhden rivin per hylätty tietue, esimerkiksi:
| Error | Column | Sarakkeen nimi | Arvo | IsOutputted | Tiedosto | ErrorRowLocation |
|---|---|---|---|---|---|---|
| Datan muunnosvirhe | 1 | vendorID |
vendorID |
1 | https://.../yellow/tripdata.csv |
0 |
| NULL ei-nollattavassa sarakkeessa | 1 | vendorID |
TYHJÄARVO | 1 | https://.../yellow/ytripdata.csv |
399 |
| Datan muunnosvirhe | 6 | passengerCount |
Ei saatavilla | 1 | https://.../yellow/yellow_tripdata.csv |
519 |
Tiedosto error.jsonl sisältää yhden JSON-objektin per rivi. Jokainen olio sisältää edellisessä taulukossa mainitut ominaisuudet. Seuraava taulukko kuvaa kunkin ominaisuuden yksityiskohtaisesti.
| Column | Kuvaus |
|---|---|
Error |
Antaa virheilmoituksen, joka selittää, miksi arvo hylättiin vastaanoton aikana. |
Column |
Määrittää lähde-CSV-tiedoston sarakkeen indeksin, joka sisältää arvon, jota ei voitu vastaanottaa. Sarakeindeksointi alkaa 1 ensimmäisestä sarakkeesta. |
ColumnName |
Määrittää kohdetaulusarakkeen nimen, johon arvoa ei voitu tallentaa. |
Value |
Lähdearvo, jota ei voitu muuntaa tai validoida. |
IsOutputted |
Ilmaisee, kirjoitetaanko lähdetiedoston rivi, joka sisältää raportoidun virheen, myös hylätyn rivin lähtötiedostoon (row.csv tai row.jsonl). Arvo ( 1 tai true JSONL-tiedostoissa) tarkoittaa, että rivi on kirjoitettu , error.csvja 0 arvo (tai false JSONL-tiedostoissa) tarkoittaa, ettei sitä ole. |
File |
Tunnistaa lähdetiedoston, josta hylätty rivi on peräisin. Tämä arvo auttaa jäljittämään hylätyn datan takaisin alkuperäiseen syötetiedostoon tutkimusta varten. |
ErrorRowLocation |
Tavun siirtymäpaikka lähdetiedostossa, jossa vika tapahtui. |
Hylätyt rivit
Kun olet tarkastellut rakenteellista diagnostiikkatietoa, voit tarkastella alkuperäistä lähdedataa, jota tietokanta ei pystynyt vastaanottamaan. Hylätyn rivin tulos sisältää lähdetietueiden kopioita, jotka on säilytetty täsmälleen sellaisina kuin ne ilmestyivät syötetiedostoissa. Hylätyt rividiagnostiikka tuottaa tiedostoja, jotka sisältävät vain ne tietueet, joiden vastaanotto epäonnistui:
- Jos vastaanotat CSV-tiedostoja käyttämällä
COPY INTO (FILE_TYPE = 'CSV'), hylätty tulos sisältää tiedostonrow.csv. Tämä tiedosto vastaa lähdetiedostorakennetta ja sisältää alkuperäiset CSV-rivit virheellisillä arvoilla. - Jos vastaanotat JSONL-tiedostoja käyttämällä
OPENROWSET(FORMAT = 'JSONL'), hylätty tulos sisältää tiedostonrow.jsonl. Tämä tiedosto säilyttää alkuperäiset JSON-objektit, jotka aiheuttivat syöttövirheitä.
Käytä näitä tiedostoja virheiden juurisyyn varmistamiseen, kuten väärismuotoiset arvot, odottamattomat NULL arvot tai virheellisesti jäsennetyt otsikkorivit.
SELECT *
FROM OPENROWSET(
BULK 'https://{storage-path}.blob.core.windows.net/Files/yellow/_rejectedrows/*/*/row.csv'
);
Skeema row.csv vastaa lähde-CSV-muotoa, ja se sisältää vain rivejä, joiden vastaanotto epäonnistui.
Esimerkki hylätyn rivin tulosteesta:
C1 |
C2 |
C3 |
C4 |
C5 |
C6 |
C7 |
C8 |
C9 |
C10 |
|---|---|---|---|---|---|---|---|---|---|
vendorID |
startLat |
startLon |
endLat |
endLon |
passengerCount |
tripDistance |
fareAmount |
mtaTax |
totalAmount |
| TYHJÄARVO | 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 | Ei saatavilla | 1.80 | 11.00 | 0.50 | 15.90 |
Näiden diagnostisten tietojen perusteella voit tunnistaa seuraavat nielemisongelmat:
- Lähdetiedoston otsikkorivi on virheellisesti jäsennelty datariviksi. Tämän ratkaisemiseksi lauseessa
COPY INTOtulisi käyttää vaihtoehtoaFIRSTROW = 2. - Lähdetiedoston rivi sarakkeelle
vendorID(C1) sisältääNULLarvoja, mutta vastaavaTaxiTripssarake kohdetaulukossa määritellään muodossaNOT NULL. - Sarakkeen lähdetiedoston
passengerCountrivi sisältää virheellisen arvon (N/A), jota ei voi muuntaa kohde-int-sarakkeeksi .
Note
Sama prosessi pätee, kun tarkastelet hylättyjä rivejä JSONL-syötteestä. Käytä row.jsonl tiedostoa hylättyjen tietueiden tarkasteluun.
Korjaa syöttöongelmat ja uudelleenvastaanotto data
Kun olet tunnistanut nielemisvirheiden syyn, korjaa ongelma ja vastaanota kyseiset tiedot uudelleen. Korjausmenetelmä riippuu siitä, mistä virhe on peräisin.
Korjaa kohdetauluskeema
Jos lähdedata ei vastaa kohdetauluskeemaa, päivitä taulun määritelmä. Yleisiä korjauksia ovat saraketietotyyppien muuttaminen tai rajoittavien rajoitteiden, kuten NOT NULL.
Joissain tapauksissa saatat joutua pudottamaan ja luomaan kohdetaulun uudelleen ennen datan uudelleenkäsittelyä.
Oikea lähdedata ja tiedostojen uudelleenvastaanotto
Jos syöttö epäonnistuu virheellisten tai epäjohdonmukaisten arvojen vuoksi lähdetiedostoissa, korjaa nämä arvot ja vastaanota data uudelleen. Esimerkiksi korvaa paikkamerkkiarvot, kuten N/A tyhjillä arvoilla tai kelvollisilla oletusarvoilla.
COPY INTO [dbo].[TaxiTrips]
FROM 'https://{storage-path}.blob.core.windows.net/Files/yellow/tripdata_corrected.csv'
WITH ( FILE_TYPE = 'CSV' );
Kun vastaanotat korjattua dataa uudelleen, käytä eksplisiittistä tiedostopolkua, joka osoittaa uuteen tiedostoon, jossa on vain korjattuja tietoja, eikä kansiopolkuun, joka viittaa alkuperäisiin tiedostoihin. Tämä lähestymistapa estää aiemmin onnistuneesti ladattujen rivien uudelleenvastaanoton ja välttää päällekkäiset tiedot.
Hylätyt rivit käsitellään uudelleen käyttämällä vaiheitustaulua
Voit ladata hylätyt rivit staging-taulukkoon, korjata tiedot käyttämällä Transact-SQL datan muokkauslauseita ja sitten vastaanottaa korjatut rivit uudelleen.
Seuraava CREATE TABLE AS SELECT lauseke lataa hylätyt rivit taulukkoon jatkokäsittelyä varten:
CREATE TABLE TaxiTrip_RejectedRows AS
SELECT *
FROM OPENROWSET(
BULK 'https://{storage-path}.blob.core.windows.net/Files/yellow/_rejectedrows/*/*/row.csv'
);
Kun olet korjannut tiedot, lisää puhdistetut rivit kohdetauluun.