Delen via


Foutafhandeling in gegevens

van toepassing op:SQL Server SSIS Integration Runtime in Azure Data Factory

Wanneer een gegevensstroomonderdeel een transformatie toepast op kolomgegevens, gegevens uit bronnen extraheert of gegevens in bestemmingen laadt, kunnen er fouten optreden. Er treden regelmatig fouten op vanwege onverwachte gegevenswaarden. Een gegevensconversie mislukt bijvoorbeeld omdat een kolom een tekenreeks bevat in plaats van een getal, een invoeging in een databasekolom mislukt omdat de gegevens een datum zijn en de kolom een numeriek gegevenstype heeft of een expressie niet kan worden geëvalueerd omdat een kolomwaarde nul is, wat resulteert in een wiskundige bewerking die niet geldig is.

Fouten vallen doorgaans in een van de volgende categorieën:

  • Fouten bij gegevensconversie, die optreden als een conversie resulteert in verlies van significante cijfers, het verlies van onbelangrijke cijfers en het afkappen van tekenreeksen. Er treden ook fouten op bij het converteren van gegevens als de aangevraagde conversie niet wordt ondersteund.

  • Evaluatiefouten voor expressies, die optreden als expressies die tijdens runtime worden geëvalueerd, ongeldige bewerkingen uitvoeren of syntactisch onjuist worden vanwege ontbrekende of onjuiste gegevenswaarden.

  • Opzoekfouten, die optreden als een opzoekbewerking een overeenkomst in de opzoektabel niet kan vinden.

Zie Integration Services-fout- en berichtreferenties voor een lijst met Integration Services-fouten, -waarschuwingen en andere berichten.

Foutuitvoer gebruiken om fouten op rijniveau vast te leggen

Veel gegevensstroomonderdelen ondersteunen foutuitvoer, waarmee u kunt bepalen hoe het onderdeel fouten op rijniveau verwerkt in zowel binnenkomende als uitgaande gegevens. U geeft op hoe het onderdeel zich gedraagt wanneer afkapping of een fout optreedt door opties in te stellen voor afzonderlijke kolommen in de invoer of uitvoer. U kunt bijvoorbeeld opgeven dat het onderdeel mislukt als klantnaamgegevens worden afgekapt, maar fouten in een andere kolom met minder belangrijke gegevens negeren.

De foutuitvoer kan worden verbonden met de invoer van een andere transformatie of geladen in een andere bestemming dan de niet-foutuitvoer. De foutuitvoer kan bijvoorbeeld zijn verbonden met een afgeleide kolomtransformatie die een tekenreeks biedt voor een kolom die leeg is.

In het volgende diagram ziet u een eenvoudige gegevensstroom, inclusief een foutuitvoer.

Gegevensstroom met foutuitvoerGegevensstroom

Zie Gegevensstroom - en Integration Services-paden voor meer informatie.

Dialoogvenster Foutuitvoer configureren

Gebruik het dialoogvenster Foutuitvoer configureren om opties voor foutafhandeling te configureren voor gegevensstroomtransformaties die ondersteuning bieden voor foutuitvoer.

Zie Foutafhandeling in gegevens voor meer informatie over het werken met foutuitvoer.

Opties

Invoer of uitvoer
Bekijk de naam van de uitvoer.

kolom
Bekijk de uitvoerkolommen die u hebt geselecteerd in het dialoogvenster transformatieeditor.

Fout
Geef indien van toepassing op wat er moet gebeuren wanneer er een fout optreedt: negeer de fout, leid de rij om of mislukt het onderdeel.

verwante onderwerpen:foutafhandeling in gegevens

Afkorting
Geef aan indien van toepassing wat er moet gebeuren wanneer er een truncatie plaatsvindt: negeer de fout, leid de rij om, of laat het onderdeel falen.

verwante onderwerpen:foutafhandeling in gegevens

Beschrijving
Bekijk de beschrijving van de bewerking.

deze waarde instellen op geselecteerde cellen
Geef op wat er moet gebeuren met alle geselecteerde cellen wanneer er een fout of truncatie optreedt: negeer de fout, leid de rij om, of laat het onderdeel falen.

Toepassen
Pas de foutafhandelingsoptie toe op de geselecteerde cellen.

Fouten zijn mislukkingen of afkappingen

Fouten vallen in een van de twee categorieën: fouten of afkappingen.

Fouten. Een fout geeft een ondubbelzinnige fout aan en genereert een NULL-resultaat. Dergelijke fouten kunnen fouten met betrekking tot gegevensconversie of evaluatiefouten van expressies bevatten. Een poging om een tekenreeks met alfabetische tekens te converteren naar een getal veroorzaakt bijvoorbeeld een fout. Gegevensconversies, expressie-evaluaties en toewijzingen van expressieresultaten aan variabelen, eigenschappen en gegevenskolommen kunnen mislukken vanwege illegale casts en incompatibele gegevenstypen. Zie Voor meer informatie Cast (SSIS Expression), Integration Services-gegevenstypen in expressies en Integration Services-gegevenstypen.

Truncations. Een afkapping is minder ernstig dan een fout. Een afkapping genereert resultaten die bruikbaar of zelfs wenselijk kunnen zijn. U kunt ervoor kiezen om truncaties te behandelen als fouten of als acceptabele voorwaarden. Als u bijvoorbeeld een tekenreeks van 15 tekens invoegt in een kolom met slechts één teken breed, kunt u ervoor kiezen om de tekenreeks af tekappen.

Selecteer een optie voor foutafhandeling

U kunt configureren hoe bronnen, transformaties en bestemmingen fouten en afkappingen verwerken. De volgende tabel beschrijft de opties.

Optie Beschrijving
Onderdeel mislukt De gegevensstroomtaak mislukt wanneer er een fout of afkapping optreedt. Mislukking is de standaardoptie voor een fout en een afsnijding.
Fout negeren Een fout of afkapping wordt genegeerd en de gegevensrij wordt doorgegeven aan de uitvoer van de transformatie of bron.
Omleidingsrij De fout of de rij met afkappingsgegevens wordt omgeleid naar de foutuitvoer van de bron, transformatie of bestemming.

Meer informatie over de fout

Naast de gegevenskolommen bevat de foutuitvoer de kolommen ErrorCode en ErrorColumn . De kolom ErrorCode identificeert de fout en de ErrorColumn bevat de herkomst-id van de foutkolom.

In sommige gevallen wordt de waarde van de kolom ErrorColumn ingesteld op nul. Dit gebeurt wanneer de foutvoorwaarde van invloed is op de hele rij in plaats van één kolom. Een voorbeeld is wanneer een zoekactie mislukt in de lookup-transformatie.

Deze twee numerieke waarden kunnen beperkt worden gebruikt zonder de bijbehorende foutbeschrijving en kolomnaam. Hier volgen enkele manieren om de foutbeschrijving en kolomnaam op te halen.

  • U kunt zowel foutbeschrijvingen als kolomnamen zien door een gegevensviewer toe te voegen aan de foutuitvoer. Klik in SSIS Designer met de rechtermuisknop op de rode pijl die leidt naar een foutuitvoer en selecteer Gegevensviewer inschakelen.

  • U kunt kolomnamen vinden door logboekregistratie in te schakelen en de DiagnosticEx-gebeurtenis te selecteren. Met deze gebeurtenis wordt een kolomkaart voor een gegevensstroom naar het logbestand geschreven. Vervolgens kunt u de kolomnaam opzoeken op basis van de id in deze kolomkaart. Houd er rekening mee dat de DiagnosticEx-gebeurtenis geen witruimte in de XML-uitvoer behoudt om de grootte van het logboek te verkleinen. Als u de leesbaarheid wilt verbeteren, kopieert u het logboek naar een XML-editor , bijvoorbeeld in Visual Studio, die ondersteuning biedt voor XML-opmaak en syntaxismarkering. Zie Logboekregistratie van Integration Services (SSIS) voor meer informatie over logboekregistratie.

    Hier volgt een voorbeeld van een kolomkaart voor een gegevensstroom.

    
    \<DTS:PipelineColumnMap xmlns:DTS="www.microsoft.com/SqlServer/Dts">  
        \<DTS:Pipeline DTS:Path="\Package\Data Flow Task">  
            \<DTS:Column DTS:ID="11" DTS:IdentificationString="ADO NET Source.Outputs[ADO NET Source Output].Columns[Customer]"/>  
            \<DTS:Column DTS:ID="12" DTS:IdentificationString="ADO NET Source.Outputs[ADO NET Source Output].Columns[Product]"/>  
            \<DTS:Column DTS:ID="13" DTS:IdentificationString="ADO NET Source.Outputs[ADO NET Source Output].Columns[Price]"/>  
            \<DTS:Column DTS:ID="14" DTS:IdentificationString="ADO NET Source.Outputs[ADO NET Source Output].Columns[Timestamp]"/>  
            \<DTS:Column DTS:ID="20" DTS:IdentificationString="ADO NET Source.Outputs[ADO NET Source Error Output].Columns[Customer]"/>  
            \<DTS:Column DTS:ID="21" DTS:IdentificationString="ADO NET Source.Outputs[ADO NET Source Error Output].Columns[Product]"/>  
            \<DTS:Column DTS:ID="22" DTS:IdentificationString="ADO NET Source.Outputs[ADO NET Source Error Output].Columns[Price]"/>  
            \<DTS:Column DTS:ID="23" DTS:IdentificationString="ADO NET Source.Outputs[ADO NET Source Error Output].Columns[Timestamp]"/>  
            \<DTS:Column DTS:ID="24" DTS:IdentificationString="ADO NET Source.Outputs[ADO NET Source Error Output].Columns[ErrorCode]"/>  
            \<DTS:Column DTS:ID="25" DTS:IdentificationString="ADO NET Source.Outputs[ADO NET Source Error Output].Columns[ErrorColumn]"/>  
            \<DTS:Column DTS:ID="31" DTS:IdentificationString="Flat File Destination.Inputs[Flat File Destination Input].Columns[Customer]"/>  
            \<DTS:Column DTS:ID="32" DTS:IdentificationString="Flat File Destination.Inputs[Flat File Destination Input].Columns[Product]"/>  
            \<DTS:Column DTS:ID="33" DTS:IdentificationString="Flat File Destination.Inputs[Flat File Destination Input].Columns[Price]"/>  
            \<DTS:Column DTS:ID="34" DTS:IdentificationString="Flat File Destination.Inputs[Flat File Destination Input].Columns[Timestamp]"/>  
        \</DTS:Pipeline>  
    \</DTS:PipelineColumnMap>  
    
    
  • U kunt ook het scriptonderdeel gebruiken om de foutbeschrijving en de kolomnaam op te nemen in extra kolommen van de foutuitvoer. Voor een voorbeeld zie Een foutuitvoer verbeteren met het scriptonderdeel.

    • Neem de foutbeschrijving op in een extra kolom met behulp van één regel script om de GetErrorDescription methode van de IDTSComponentMetaData100 interface aan te roepen.

    • Neem de kolomnaam op in een extra kolom door een enkele regel script te gebruiken om de methode [Microsoft.SqlServer.Dts.Pipeline.Wrapper.IDTSComponentMetaData100.GetIdentificationStringByID*] (/previous-versions/sql/sql-server-2016/mt657629(v=sql.130)) van de IDTSComponentMetaData100 interface aan te roepen.

    U kunt de scriptonderdeel overal downstream in het foutsegment van de gegevensstroom toevoegen, vanaf de gegevensstroomonderdelen waarvan u de fouten wilt vastleggen. Meestal plaatst u het Script-component vlak voordat de foutrijen naar een bestemming worden gestuurd. Op deze manier zoekt het script alleen beschrijvingen op voor foutrijen die zijn geschreven. Het foutsegment van de gegevensstroom kan enkele fouten corrigeren en deze rijen niet naar een foutbestemming schrijven.

Zie ook

gegevensstroom
Gegevens transformeren met transformaties
Onderdelen verbinden met paden
Gegevensstroomtaak
gegevensstroom