Delen via


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:

  1. De bestanden die door de service moeten worden gekopieerd, worden tegelijkertijd verwijderd door andere toepassingen.
  2. 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.
  3. 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:

  1. 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.

  2. Selecteer de nieuwe kopieergegevensactiviteit op het canvas als deze nog niet is geselecteerd en het tabblad Instellingen om fouttolerantie te configureren.

    Toont de gebruikersinterface voor een kopieergegevensactiviteit op het tabblad Instellingen met de configuratie Fouttolerantie gemarkeerd.

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:

  • Hier vindt u meer informatie over gegevensconsistentiedocumenten.

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)."

Zie de andere artikelen over kopieeractiviteiten: