Fouttolerantie van kopieeractiviteit in Azure Data Factory- en Synapse Analytics-pijplijnen
VAN TOEPASSING OP: Azure Data Factory Azure Synapse Analytics
Tip
Probeer Data Factory uit in Microsoft Fabric, een alles-in-één analyseoplossing voor ondernemingen. Microsoft Fabric omvat alles, van gegevensverplaatsing tot gegevenswetenschap, realtime analyses, business intelligence en rapportage. Meer informatie over het gratis starten van een nieuwe proefversie .
Wanneer u gegevens kopieert van de bron naar het doelarchief, biedt de kopieeractiviteit een bepaald niveau van fouttoleranties om onderbrekingen van storingen in het midden van de gegevensverplaatsing te voorkomen. U kopieert bijvoorbeeld miljoenen rijen van bron-naar-doelopslag, waarbij een primaire sleutel is gemaakt in de doeldatabase, maar de brondatabase geen primaire sleutels heeft gedefinieerd. Wanneer u dubbele rijen van de bron naar het doel kopieert, wordt de PK-schending van de doeldatabase veroorzaakt. Op dit moment biedt kopieeractiviteit u twee manieren om dergelijke fouten te verwerken:
- U kunt de kopieeractiviteit afbreken zodra er een fout is opgetreden.
- U kunt de rest blijven kopiëren door fouttolerantie in te schakelen om de niet-compatibele gegevens over te slaan. Sla bijvoorbeeld de gedupliceerde rij in dit geval over. Daarnaast kunt u de overgeslagen gegevens registreren door het sessielogboek in te schakelen binnen de kopieeractiviteit. U kunt verwijzen naar sessielogboek in kopieeractiviteit voor meer informatie.
Binaire bestanden kopiëren
De service ondersteunt de volgende fouttolerantiescenario's bij het kopiëren van binaire bestanden. U kunt ervoor kiezen om de kopieeractiviteit af te breken of de rest in de volgende scenario's te kopiëren:
- De bestanden die door de service moeten worden gekopieerd, worden tegelijkertijd verwijderd door andere toepassingen.
- Sommige specifieke mappen of bestanden staan de servicetoegang niet toe omdat ACL's van deze bestanden of mappen een hoger machtigingsniveau vereisen dan de geconfigureerde verbindingsgegevens.
- Een of meer bestanden worden niet geverifieerd om consistent te zijn tussen het bron- en doelarchief als u de instelling voor verificatie van gegevensconsistentie inschakelt.
Fouttolerantie inschakelen met de gebruikersinterface
Voer de volgende stappen uit om fouttolerantie in een Copy-activiteit in een pijplijn met de gebruikersinterface te configureren:
Als u nog geen Copy-activiteit voor uw pijplijn hebt gemaakt, zoekt u naar Kopiëren in het deelvenster Pijplijnactiviteiten en sleept u een kopieergegevensactiviteit naar het pijplijncanvas.
Selecteer de nieuwe kopieergegevensactiviteit op het canvas als deze nog niet is geselecteerd en het tabblad Instellingen om fouttolerantie te configureren.
Configuratie
Wanneer u binaire bestanden kopieert tussen opslagarchieven, kunt u fouttolerantie als volgt inschakelen:
{
"name": "CopyActivityFaultTolerance",
"type": "Copy",
"typeProperties": {
"source": {
"type": "BinarySource",
"storeSettings": {
"type": "AzureDataLakeStoreReadSettings",
"recursive": true
}
},
"sink": {
"type": "BinarySink",
"storeSettings": {
"type": "AzureDataLakeStoreWriteSettings"
}
},
"skipErrorFile": {
"fileMissing": true,
"fileForbidden": true,
"dataInconsistency": true,
"invalidFileName": true
},
"validateDataConsistency": true,
"logSettings": {
"enableCopyActivityLog": true,
"copyActivityLogSettings": {
"logLevel": "Warning",
"enableReliableLogging": false
},
"logLocationSettings": {
"linkedServiceName": {
"referenceName": "ADLSGen2",
"type": "LinkedServiceReference"
},
"path": "sessionlog/"
}
}
}
}
Eigenschappen | Beschrijving | Toegestane waarden | Vereist |
---|---|---|---|
skipErrorFile | Een groep eigenschappen om de typen fouten op te geven die u tijdens de gegevensverplaatsing wilt overslaan. | Nee | |
fileMissing | Een van de sleutel-waardeparen in de eigenschapsverzameling skipErrorFile om te bepalen of u bestanden wilt overslaan die door andere toepassingen worden verwijderd op het moment dat de service de kopieerbewerking uitvoert. -True: u wilt de rest kopiëren door de bestanden te overslaan die door andere toepassingen worden verwijderd. - Onwaar: u wilt de kopieeractiviteit afbreken zodra bestanden worden verwijderd uit het bronarchief in het midden van de gegevensverplaatsing. Houd er rekening mee dat deze eigenschap is ingesteld op true als standaard. |
Waar (standaard) Onwaar |
Nee |
fileForbidden | Een van de sleutel-waardeparen in skipErrorFile-eigenschappenverzameling om te bepalen of u de specifieke bestanden wilt overslaan, wanneer de ACL's van deze bestanden of mappen een hoger machtigingsniveau vereisen dan de geconfigureerde verbinding. -True: u wilt de rest kopiëren door de bestanden over te slaan. - Onwaar: u wilt de kopieeractiviteit afbreken zodra het machtigingsprobleem op mappen of bestanden is opgetreden. |
Waar False (standaard) |
Nee |
dataInconsistentie | Een van de sleutel-waardeparen in de eigenschapstas skipErrorFile om te bepalen of u de inconsistente gegevens tussen de bron- en doelopslag wilt overslaan. -True: u wilt de rest kopiëren door inconsistente gegevens over te slaan. - Onwaar: u wilt de kopieeractiviteit afbreken zodra inconsistente gegevens zijn gevonden. Houd er rekening mee dat deze eigenschap alleen geldig is wanneer u validateDataConsistency instelt als True. |
Waar False (standaard) |
Nee |
invalidFileName | Een van de sleutel-waardeparen in skipErrorFile-eigenschappenverzameling om te bepalen of u de specifieke bestanden wilt overslaan, wanneer de bestandsnamen ongeldig zijn voor het doelarchief. -True: u wilt de rest kopiëren door de bestanden met ongeldige bestandsnamen over te slaan. - Onwaar: u wilt de kopieeractiviteit afbreken zodra bestanden ongeldige bestandsnamen hebben. Houd er rekening mee dat deze eigenschap werkt bij het kopiëren van binaire bestanden uit een opslagarchief naar ADLS Gen2 of het kopiëren van binaire bestanden van AWS S3 naar een opslagarchief. |
Waar False (standaard) |
Nee |
logSettings | Een groep eigenschappen die kan worden opgegeven wanneer u de overgeslagen objectnamen wilt vastleggen. | Nee | |
linkedServiceName | De gekoppelde service van Azure Blob Storage of Azure Data Lake Storage Gen2 om de sessielogboekbestanden op te slaan. | De namen van een AzureBlobStorage gekoppelde service of AzureBlobFS het type, die verwijst naar het exemplaar dat u gebruikt om het logboekbestand op te slaan. |
Nee |
path | Het pad van de logboekbestanden. | Geef het pad op dat u gebruikt om de logboekbestanden op te slaan. Als u geen pad opgeeft, maakt de service een container voor u. | Nr. |
Notitie
Hieronder volgen de vereisten voor het inschakelen van fouttolerantie bij kopieeractiviteit bij het kopiëren van binaire bestanden. Voor het overslaan van bepaalde bestanden wanneer ze worden verwijderd uit het bronarchief:
- De brongegevensset en sinkgegevensset moeten binaire indeling zijn en het compressietype kan niet worden opgegeven.
- De ondersteunde typen gegevensarchieven zijn Azure Blob Storage, Azure Data Lake Storage Gen1, Azure Data Lake Storage Gen2, Azure Files, File System, FTP, SFTP, Amazon S3, Google Cloud Storage en HDFS.
- Alleen als u meerdere bestanden opgeeft in de brongegevensset, die een map, jokerteken of een lijst met bestanden kan zijn, kan de kopieeractiviteit de specifieke foutbestanden overslaan. Als er één bestand is opgegeven in de brongegevensset die naar het doel moet worden gekopieerd, mislukt de kopieeractiviteit als er een fout is opgetreden.
Voor het overslaan van bepaalde bestanden wanneer hun toegang is verboden vanuit het bronarchief:
- De brongegevensset en sinkgegevensset moeten binaire indeling zijn en het compressietype kan niet worden opgegeven.
- De ondersteunde typen gegevensarchieven zijn Azure Blob Storage, Azure Data Lake Storage Gen1, Azure Data Lake Storage Gen2, Azure Files, SFTP, Amazon S3 en HDFS.
- Alleen als u meerdere bestanden opgeeft in de brongegevensset, die een map, jokerteken of een lijst met bestanden kan zijn, kan de kopieeractiviteit de specifieke foutbestanden overslaan. Als er één bestand is opgegeven in de brongegevensset die naar het doel moet worden gekopieerd, mislukt de kopieeractiviteit als er een fout is opgetreden.
Voor het overslaan van bepaalde bestanden wanneer wordt gecontroleerd of ze inconsistent zijn tussen het bron- en doelarchief:
Controleren
Uitvoer van kopieeractiviteit
U kunt het aantal bestanden ophalen dat wordt gelezen, geschreven en overgeslagen via de uitvoer van elke uitvoering van de kopieeractiviteit.
"output": {
"dataRead": 695,
"dataWritten": 186,
"filesRead": 3,
"filesWritten": 1,
"filesSkipped": 2,
"throughput": 297,
"logFilePath": "myfolder/a84bf8d4-233f-4216-8cb5-45962831cd1b/",
"dataConsistencyVerification":
{
"VerificationResult": "Verified",
"InconsistentData": "Skipped"
}
}
Sessielogboek van kopieeractiviteit
Als u de overgeslagen bestandsnamen configureert, kunt u het logboekbestand vinden via dit pad: https://[your-blob-account].blob.core.windows.net/[path-if-configured]/copyactivity-logs/[copy-activity-name]/[copy-activity-run-id]/[auto-generated-GUID].csv
De logboekbestanden moeten de CSV-bestanden zijn. Het schema van het logboekbestand is als volgt:
Kolom | Beschrijving |
---|---|
Tijdstempel | De tijdstempel waarop het bestand is overgeslagen. |
Niveau | Het logboekniveau van dit item. Het wordt weergegeven op waarschuwingsniveau voor het item met het overslaan van bestanden. |
OperationName | Copy-activiteit operationeel gedrag voor elk bestand. Het wordt 'FileSkip' om het bestand op te geven dat moet worden overgeslagen. |
OperationItem | De bestandsnamen die moeten worden overgeslagen. |
Bericht | Meer informatie om te illustreren waarom het bestand wordt overgeslagen. |
Het voorbeeld van een logboekbestand is als volgt:
Timestamp,Level,OperationName,OperationItem,Message
2020-03-24 05:35:41.0209942,Warning,FileSkip,"bigfile.csv","File is skipped after read 322961408 bytes: ErrorCode=UserErrorSourceBlobNotExist,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=The required Blob is missing. ContainerName: https://transferserviceonebox.blob.core.windows.net/skipfaultyfile, path: bigfile.csv.,Source=Microsoft.DataTransfer.ClientLibrary,'."
2020-03-24 05:38:41.2595989,Warning,FileSkip,"3_nopermission.txt","File is skipped after read 0 bytes: ErrorCode=AdlsGen2OperationFailed,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=ADLS Gen2 operation failed for: Operation returned an invalid status code 'Forbidden'. Account: 'adlsgen2perfsource'. FileSystem: 'skipfaultyfilesforbidden'. Path: '3_nopermission.txt'. ErrorCode: 'AuthorizationPermissionMismatch'. Message: 'This request is not authorized to perform this operation using this permission.'. RequestId: '35089f5d-101f-008c-489e-01cce4000000'..,Source=Microsoft.DataTransfer.ClientLibrary,''Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=Operation returned an invalid status code 'Forbidden',Source=,''Type=Microsoft.Azure.Storage.Data.Models.ErrorSchemaException,Message='Type=Microsoft.Azure.Storage.Data.Models.ErrorSchemaException,Message=Operation returned an invalid status code 'Forbidden',Source=Microsoft.DataTransfer.ClientLibrary,',Source=Microsoft.DataTransfer.ClientLibrary,'."
In het bovenstaande logboek ziet u bigfile.csv is overgeslagen omdat dit bestand door een andere toepassing is verwijderd toen de service het kopieerde. En 3_nopermission.txt is overgeslagen omdat de service geen toegang heeft vanwege een machtigingsprobleem.
Tabelgegevens kopiëren
Ondersteunde scenario's
Copy-activiteit ondersteunt drie scenario's voor het detecteren, overslaan en vastleggen van incompatibele tabelgegevens:
Incompatibiliteit tussen het brongegevenstype en het systeemeigen sinktype.
Bijvoorbeeld: Kopieer gegevens uit een CSV-bestand in Blob Storage naar een SQL-database met een schemadefinitie die drie INT-typekolommen bevat. De CSV-bestandsrijen die numerieke gegevens bevatten, zoals 123.456.789, worden gekopieerd naar het sinkarchief. De rijen die niet-numerieke waarden bevatten, zoals 123.456, abc worden echter als niet-compatibel gedetecteerd en overgeslagen.
Komt niet overeen met het aantal kolommen tussen de bron en de sink.
Bijvoorbeeld: Gegevens uit een CSV-bestand in Blob Storage kopiëren naar een SQL-database met een schemadefinitie die zes kolommen bevat. De CSV-bestandsrijen die zes kolommen bevatten, worden gekopieerd naar het sinkarchief. De CSV-bestandsrijen die meer dan zes kolommen bevatten, worden als niet compatibel gedetecteerd en worden overgeslagen.
Schending van de primaire sleutel bij het schrijven naar SQL Server/Azure SQL Database/Azure Cosmos DB.
Bijvoorbeeld: Gegevens kopiëren van een SQL-server naar een SQL-database. Er wordt een primaire sleutel gedefinieerd in de sink-SQL-database, maar er wordt geen primaire sleutel gedefinieerd in de bron-SQL-server. De gedupliceerde rijen in de bron kunnen niet worden gekopieerd naar de sink. Copy-activiteit kopieert alleen de eerste rij van de brongegevens naar de sink. De volgende bronrijen die de gedupliceerde primaire-sleutelwaarde bevatten, worden gedetecteerd als niet compatibel en worden overgeslagen.
Notitie
- Als u gegevens wilt laden in Azure Synapse Analytics met behulp van PolyBase, configureert u de systeemeigen fouttolerantie-instellingen van PolyBase door beleid op te geven via 'polyBaseSettings' in de kopieeractiviteit. U kunt het omleiden van niet-compatibele PolyBase-rijen naar Blob of ADLS nog steeds als normaal inschakelen, zoals hieronder wordt weergegeven.
- Deze functie is niet van toepassing wanneer de kopieeractiviteit is geconfigureerd om Amazon Redshift Unload aan te roepen.
- Deze functie is niet van toepassing wanneer kopieeractiviteit is geconfigureerd voor het aanroepen van een opgeslagen procedure vanuit een SQL-sink of upsert gebruiken om gegevens naar een SQL-sink te schrijven.
Configuratie
In het volgende voorbeeld ziet u een JSON-definitie voor het overslaan van de incompatibele rijen in de kopieeractiviteit:
"typeProperties": {
"source": {
"type": "AzureSqlSource"
},
"sink": {
"type": "AzureSqlSink"
},
"enableSkipIncompatibleRow": true,
"logSettings": {
"enableCopyActivityLog": true,
"copyActivityLogSettings": {
"logLevel": "Warning",
"enableReliableLogging": false
},
"logLocationSettings": {
"linkedServiceName": {
"referenceName": "ADLSGen2",
"type": "LinkedServiceReference"
},
"path": "sessionlog/"
}
}
},
Eigenschappen | Beschrijving | Toegestane waarden | Vereist |
---|---|---|---|
enableSkipIncompatibleRow | Hiermee geeft u op of niet-compatibele rijen moeten worden overgeslagen tijdens het kopiëren of niet. | Waar False (standaard) |
Nee |
logSettings | Een groep eigenschappen die kan worden opgegeven wanneer u de incompatibele rijen wilt registreren. | Nee | |
linkedServiceName | De gekoppelde service van Azure Blob Storage of Azure Data Lake Storage Gen2 voor het opslaan van het logboek met de overgeslagen rijen. | De namen van een AzureBlobStorage gekoppelde service of AzureBlobFS het type, die verwijst naar het exemplaar dat u gebruikt om het logboekbestand op te slaan. |
Nee |
path | Het pad van de logboekbestanden met de overgeslagen rijen. | Geef het pad op dat u wilt gebruiken om de niet-compatibele gegevens te registreren. Als u geen pad opgeeft, maakt de service een container voor u. | Nee |
Overgeslagen rijen bewaken
Nadat de uitvoering van de kopieeractiviteit is voltooid, ziet u het aantal overgeslagen rijen in de uitvoer van de kopieeractiviteit:
"output": {
"dataRead": 95,
"dataWritten": 186,
"rowsCopied": 9,
"rowsSkipped": 2,
"copyDuration": 16,
"throughput": 0.01,
"logFilePath": "myfolder/a84bf8d4-233f-4216-8cb5-45962831cd1b/",
"errors": []
},
Als u configureert om de niet-compatibele rijen te registreren, kunt u het logboekbestand vinden via dit pad: https://[your-blob-account].blob.core.windows.net/[path-if-configured]/copyactivity-logs/[copy-activity-name]/[copy-activity-run-id]/[auto-generated-GUID].csv
.
De logboekbestanden zijn de CSV-bestanden. Het schema van het logboekbestand is als volgt:
Kolom | Beschrijving |
---|---|
Tijdstempel | De tijdstempel waarin de incompatibele rijen zijn overgeslagen |
Niveau | Het logboekniveau van dit item. Het niveau Waarschuwing wordt weergegeven als dit item de overgeslagen rijen weergeeft |
OperationName | Copy-activiteit operationeel gedrag op elke rij. Het wordt 'TabularRowSkip' om op te geven dat de specifieke incompatibele rij is overgeslagen |
OperationItem | De overgeslagen rijen uit het brongegevensarchief. |
Bericht | Meer informatie om te illustreren waarom de incompatibiliteit van deze specifieke rij. |
Een voorbeeld van de inhoud van het logboekbestand is als volgt:
Timestamp, Level, OperationName, OperationItem, Message
2020-02-26 06:22:32.2586581, Warning, TabularRowSkip, """data1"", ""data2"", ""data3""," "Column 'Prop_2' contains an invalid value 'data3'. Cannot convert 'data3' to type 'DateTime'."
2020-02-26 06:22:33.2586351, Warning, TabularRowSkip, """data4"", ""data5"", ""data6"",", "Violation of PRIMARY KEY constraint 'PK_tblintstrdatetimewithpk'. Cannot insert duplicate key in object 'dbo.tblintstrdatetimewithpk'. The duplicate key value is (data4)."
In het bovenstaande voorbeeldlogboekbestand ziet u dat één rij 'data1, data2, data3' is overgeslagen vanwege een typeconversieprobleem van de bron naar het doelarchief. Een andere rij 'data4, data5, data6' is overgeslagen vanwege een probleem met PK-schendingen van bron-naar-doelopslag.
Tabelgegevens kopiëren (verouderd):
De volgende methode is de verouderde manier om fouttolerantie in te schakelen voor het kopiëren van tabelgegevens. Als u een nieuwe pijplijn of activiteit maakt, wordt u aangeraden hier te beginnen.
Configuratie
In het volgende voorbeeld ziet u een JSON-definitie voor het overslaan van de incompatibele rijen in de kopieeractiviteit:
"typeProperties": {
"source": {
"type": "BlobSource"
},
"sink": {
"type": "SqlSink",
},
"enableSkipIncompatibleRow": true,
"redirectIncompatibleRowSettings": {
"linkedServiceName": {
"referenceName": "<Azure Storage or Data Lake Store linked service>",
"type": "LinkedServiceReference"
},
"path": "redirectcontainer/erroroutput"
}
}
Eigenschappen | Beschrijving | Toegestane waarden | Vereist |
---|---|---|---|
enableSkipIncompatibleRow | Hiermee geeft u op of niet-compatibele rijen moeten worden overgeslagen tijdens het kopiëren of niet. | Waar False (standaard) |
Nee |
redirectIncompatibleRowSettings | Een groep eigenschappen die kan worden opgegeven wanneer u de incompatibele rijen wilt registreren. | Nee | |
linkedServiceName | De gekoppelde service van Azure Storage of Azure Data Lake Store om het logboek op te slaan dat de overgeslagen rijen bevat. | De namen van een AzureStorage gekoppelde service of AzureDataLakeStore het type die verwijst naar het exemplaar dat u wilt gebruiken om het logboekbestand op te slaan. |
Nee |
path | Het pad van het logboekbestand dat de overgeslagen rijen bevat. | Geef het pad op dat u wilt gebruiken om de niet-compatibele gegevens te registreren. Als u geen pad opgeeft, maakt de service een container voor u. | Nee |
Overgeslagen rijen bewaken
Nadat de uitvoering van de kopieeractiviteit is voltooid, ziet u het aantal overgeslagen rijen in de uitvoer van de kopieeractiviteit:
"output": {
"dataRead": 95,
"dataWritten": 186,
"rowsCopied": 9,
"rowsSkipped": 2,
"copyDuration": 16,
"throughput": 0.01,
"redirectRowPath": "https://myblobstorage.blob.core.windows.net//myfolder/a84bf8d4-233f-4216-8cb5-45962831cd1b/",
"errors": []
},
Als u configureert om de niet-compatibele rijen te registreren, kunt u het logboekbestand vinden op dit pad: https://[your-blob-account].blob.core.windows.net/[path-if-configured]/[copy-activity-run-id]/[auto-generated-GUID].csv
.
De logboekbestanden kunnen alleen de CSV-bestanden zijn. De oorspronkelijke gegevens die worden overgeslagen, worden indien nodig vastgelegd met komma's als kolomscheidingsteken. We voegen nog twee kolommen 'ErrorCode' en 'ErrorMessage' toe naast de oorspronkelijke brongegevens in het logboekbestand, waar u de hoofdoorzaak van de incompatibiliteit kunt zien. De ErrorCode en ErrorMessage worden tussen dubbele aanhalingstekens genoemd.
Een voorbeeld van de inhoud van het logboekbestand is als volgt:
data1, data2, data3, "UserErrorInvalidDataValue", "Column 'Prop_2' contains an invalid value 'data3'. Cannot convert 'data3' to type 'DateTime'."
data4, data5, data6, "2627", "Violation of PRIMARY KEY constraint 'PK_tblintstrdatetimewithpk'. Cannot insert duplicate key in object 'dbo.tblintstrdatetimewithpk'. The duplicate key value is (data4)."
Gerelateerde inhoud
Zie de andere artikelen over kopieeractiviteiten: