Poznámka
Na prístup k tejto stránke sa vyžaduje oprávnenie. Môžete sa skúsiť prihlásiť alebo zmeniť adresáre.
Na prístup k tejto stránke sa vyžaduje oprávnenie. Môžete skúsiť zmeniť adresáre.
Vzťahuje sa na: ✅ sklad v Microsoft Fabric
Tento článok popisuje, ako riešiť poruchy príjmu v T-SQL vzoroch príjmu.
Vstup do skladu pomocou COPY INTOfunkcií , BULK INSERT, OPENROWSET , CTASINSERTUPDATE, , a príkazov MERGE môže zlyhať z viacerých dôvodov. Hodnoty zdrojových súborov nemusia zodpovedať tabuľkovej schéme. Požadované hodnoty môžu chýbať. Možnosti príjmu môžu byť tiež nesprávne nastavené.
Tento návod na riešenie problémov využíva diagnostické informácie o odmietnutých riadkoch na riešenie zlyhaní, zachytávanie chýb na úrovni riadkov a kontrolu zamietnutých riadkov s chybovými metadátami.
Preskúmaním chybových súborov generovaných COPY INTO a ďalšími príkazmi na príjem môžete presne určiť, ktoré riadky zlyhali a prečo. Tieto informácie vám pomôžu identifikovať problémy s kvalitou dát alebo upraviť nastavenia príjmu, opraviť zdrojové dáta a s istotou znovu spustiť záťaž.
Dôležité
Tieto inštrukcie platia iba pre prijímanie CSV alebo JSONL súborov pomocou príkazov Transact-SQL (COPY INTO, BULK INSERT, a DML s funkciou OPENROWSET ). Odmietnuté riadky a výstupné súbory sa negenerujú pre externé nástroje na prijímanie (ako sú pipeline),súbory Parquet alebo pri prijímaní dát z SQL analytics endpointu.
Vytvorte cieľovú tabuľku
Pred spustením príkazov na príjem vytvorte cieľovú tabuľku s prísnymi typmi a NOT NULL obmedzeniami, aby ste včas odhalili problémy s konverziou a kvalitou dát.
Vo vašom skladovom pracovnom priestore otvorte svoj sklad.
Na karte Domov vyberte Nový SQL dotaz.
Spustite nasledujúce vyhlásenie:
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 );
Môžete použiť viacero podporovaných metód, vrátane ingestovania cez COPY INTO alebo ingestovania cez Transact-SQL. Vyberte si metódu prijímania, ktorá najlepšie vyhovuje vašim požiadavkám na zdroj dát, formát a automatizáciu. Nasledujúci príklad COPY INTO ilustruje bežný vzor príjmu údajov pri načítavaní dát z externých súborov do tabuľky.
COPY INTO [dbo].[TaxiTrips]
FROM 'https://{storage-path}.blob.core.windows.net/Files/yellow/'
WITH ( FILE_TYPE = 'CSV' );
Tento príkaz môže zlyhať pri prijímaní dát, ak zdrojové súbory nezodpovedajú schéme cieľovej tabuľky. Bežné príčiny zahŕňajú nesúlad v počte stĺpcov, nekompatibilné dátové typy alebo hodnoty, ktoré nie je možné uložiť do cieľovej tabuľky. Ak príjem narazí na hodnoty, ktoré nie je možné konvertovať do cieľovej schémy, príkaz vráti chybu podobnú nasledujúcej tejto:
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áto chyba znamená, že jeden alebo viac riadkov nie je možné previesť na cieľové typy stĺpcov.
Vyšetrovanie chýb pomocou MAXERRORS a ERRORFILE
Použite nasledujúce možnosti na pokračovanie v prijímaní, keď je počet chýb na úrovni riadkov pod definovaným prahom, a na uloženie diagnostických detailov na určené miesto.
-
MAXERRORSstanovuje maximálny počet tolerovaných zlyhaní na úrovni riadku počas prijímania. -
ERRORFILEšpecifikuje, kam databáza zapisuje zamietnuté riadky a detaily chyby.
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/'
);
Dôležité
Konfigurujte ERRORFILE na rovnakom úložisku, ktoré sa používa na čítanie zdrojových súborov, nie v inom úložnom účte. Identita použitá na prístup k zdrojovým dátam musí mať tiež oprávnenia na vytváranie priečinkov a súborov v nastavenej chybovej ceste.
Operácia načítania je úspešná len vtedy, keď počet zamietnutých riadkov je nižší ako MAXERRORS. Keď sa zachytia chyby, operácia príjmu zapíše:
-
error.jsonlpre štruktúrovanú diagnostiku -
row.csvpre zamietnuté zdrojové riadky
Nájdite a vyhľadajte zamietnuté riadky
Databáza zapisuje chybové informácie do štruktúrovanej hierarchie priečinkov pod nastavenou lokalitou chyby. Tieto priečinky vám pomáhajú vystopovať konkrétne vykonanie a korelovať diagnostiku s jedným príkazom na príjem:
ERRORFILE/
+-- _rejectedrows/
+-- <timestamp>/
+-- <statement_id>/
+-- error.jsonl
+-- row.csv or rows.jsonl
Použite OPENROWSET na čítanie štruktúrovanej diagnostiky error.jsonl , aby ste mohli identifikovať, ktorá hodnota zlyhala, ktorý cieľový stĺpec bol ovplyvnený a odkiaľ pochádza zlyhajúci riadok:
SELECT *
FROM OPENROWSET(
BULK 'https://{storage-path}.blob.core.windows.net/Files/yellow/_rejectedrows/*/*/error.jsonl'
);
Výsledná sada zvyčajne obsahuje jeden riadok na každý zamietnutý záznam, napríklad:
| Chyba | Stĺpec | NázovStĺpca | Value | IsOutputted | Súbor | ErrorRowLocation |
|---|---|---|---|---|---|---|
| Chyba pri konverzii dát | 1 | vendorID |
vendorID |
1 | https://.../yellow/tripdata.csv |
0 |
| NULL v nenulovateľnom stĺpci | 1 | vendorID |
NULL | 1 | https://.../yellow/ytripdata.csv |
399 |
| Chyba pri konverzii dát | 6 | passengerCount |
N/A | 1 | https://.../yellow/yellow_tripdata.csv |
519 |
Súbor error.jsonl obsahuje jeden JSON objekt na riadok. Každý objekt obsahuje vlastnosti uvedené v predchádzajúcej tabuľke. Nasledujúca tabuľka podrobne popisuje každú vlastnosť.
| Stĺpec | Popis |
|---|---|
Error |
Poskytuje chybovú správu, ktorá vysvetľuje, prečo bola hodnota odmietnutá počas prijímania. |
Column |
Špecifikuje index stĺpca v zdrojovom CSV súbore, ktorý obsahuje hodnotu, ktorú nebolo možné importovať. Indexovanie stĺpcov začína pre 1 prvý stĺpec. |
ColumnName |
Špecifikuje názov stĺpca cieľovej tabuľky, do ktorého sa hodnota nedala uložiť. |
Value |
Zdrojová hodnota, ktorú nebolo možné konvertovať ani overiť. |
IsOutputted |
Označuje, či riadok zo zdrojového súboru, ktorý obsahuje nahlásenú chybu, je tiež zapísaný do výstupného súboru odmietnutého riadku (row.csv alebo row.jsonl). Hodnota ( 1 alebo true v súboroch JSONL) znamená, že riadok je zapísaný v error.csv, a hodnota ( 0 alebo false v súboroch JSONL) znamená, že nie je. |
File |
Identifikuje zdrojový súbor, z ktorého pochádza zamietnutý riadok. Táto hodnota vám pomáha vystopovať zamietnuté dáta späť do pôvodného vstupného súboru na preskúmanie. |
ErrorRowLocation |
Pozícia posunu bajtu v zdrojovom súbore, kde došlo k zlyhaniu. |
Preskúmajte zamietnuté riadky
Po preštudovaní štruktúrovaných diagnostických informácií môžete skontrolovať pôvodné zdrojové dáta, ktoré databáza nedokázala absorbovať. Výstup zamietnutých riadkov obsahuje kópie zdrojových záznamov, zachované presne tak, ako sa objavili vo vstupných súboroch. Diagnostika zamietnutých riadkov generuje súbory, ktoré obsahujú iba záznamy, ktoré zlyhali pri prijatí:
- Ak importujete CSV súbory pomocou
COPY INTO (FILE_TYPE = 'CSV'), zamietnutý výstup obsahuje súbor.row.csvTento súbor zodpovedá štruktúre zdrojového súboru a obsahuje pôvodné CSV riadky s neplatnými hodnotami. - Ak importujete JSONL súbory pomocou
OPENROWSET(FORMAT = 'JSONL'), odmietnutý výstup obsahuje súbor.row.jsonlTento súbor uchováva pôvodné JSON objekty, ktoré spôsobovali zlyhania príjmu.
Použite tieto súbory na overenie príčiny chýb, ako sú deformované hodnoty, neočakávané NULL hodnoty alebo riadky hlavičky, ktoré boli nesprávne spracované ako dáta.
SELECT *
FROM OPENROWSET(
BULK 'https://{storage-path}.blob.core.windows.net/Files/yellow/_rejectedrows/*/*/row.csv'
);
Schéma row.csv zodpovedá zdrojovému CSV tvaru a obsahuje len riadky, ktoré zlyhali pri zadávaní.
Príklad výstupu s zamietnutým riadkom:
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 | N/A | 1.80 | 11.00 | 0.50 | 15.90 |
Na základe týchto diagnostických informácií môžete identifikovať nasledujúce problémy s požitím:
- Riadok hlavičky v zdrojovom súbore je omylom parsovaný ako dátový riadok. Na vyriešenie by sa
COPY INTOvo vyhlásení mala použiť tátoFIRSTROW = 2možnosť. - Riadok v zdrojovom súbore pre stĺpec
vendorID(C1) obsahujeNULLhodnoty, ale príslušný stĺpec v cieľovej tabuľkeTaxiTripsje definovaný akoNOT NULL. - Riadok v zdrojovom súbore pre stĺpec
passengerCountobsahuje neplatnú hodnotu (N/A), ktorú nie je možné previesť na cieľový stĺpec int .
Poznámka
Rovnaký postup platí, keď skúmate zamietnuté riadky z JSONL vstupu. Použite row.jsonl súbor na kontrolu zamietnutých záznamov.
Oprava problémov s príjmom a opätovný príjem dát
Keď identifikujete príčinu zlyhaní príjmu, opravte problém a znovu načítajte postihnuté dáta. Prístup k náprave závisí od toho, odkiaľ chyba pochádza.
Opravte schému cieľovej tabuľky
Ak zdrojové dáta nezodpovedajú cieľovej schéme tabuľky, aktualizujte definíciu tabuľky. Bežné opravy zahŕňajú zmenu dátových typov stĺpcov alebo odstránenie obmedzení, ako je NOT NULL.
V niektorých prípadoch možno budete musieť pred opätovným vložením dát vyhodiť a znovu vytvoriť cieľovú tabuľku.
Správna zdrojová dáta a opätovné ingestovanie súborov
Ak príjem zlyhá kvôli neplatným alebo nekonzistentným hodnotám v zdrojových súboroch, opravte tieto hodnoty a znovu načítajte dáta. Napríklad nahraďte zástupné hodnoty, ako sú N/A prázdne hodnoty alebo platné predvolené hodnoty.
COPY INTO [dbo].[TaxiTrips]
FROM 'https://{storage-path}.blob.core.windows.net/Files/yellow/tripdata_corrected.csv'
WITH ( FILE_TYPE = 'CSV' );
Pri opätovnom vkladaní opravených dát použite explicitnú cestu k súboru, ktorá ukazuje na nový súbor obsahujúci iba opravené dáta, namiesto cesty po priečinku, ktorá odkazuje na pôvodné súbory. Tento prístup zabraňuje opätovnému vkladaniu riadkov, ktoré boli predtým úspešne načítané, a zabraňuje duplicitným dátam.
Opätovné spracovanie zamietnutých riadkov pomocou staging tabuľky
Môžete načítať odmietnuté riadky do staging tabuľky, opraviť dáta pomocou Transact-SQL príkazov na úpravu dát a potom znovu načítať opravené riadky.
Nasledujúci CREATE TABLE AS SELECT príkaz načíta zamietnuté riadky do tabuľky na ďalšie spracovanie:
CREATE TABLE TaxiTrip_RejectedRows AS
SELECT *
FROM OPENROWSET(
BULK 'https://{storage-path}.blob.core.windows.net/Files/yellow/_rejectedrows/*/*/row.csv'
);
Po oprave dát vložte vyčistené riadky do cieľovej tabuľky.