Sdílet prostřednictvím


Odolnost proti chybám aktivity kopírování v kanálech Azure Data Factory a Synapse Analytics

PLATÍ PRO: Azure Data Factory Azure Synapse Analytics

Tip

Vyzkoušejte si službu Data Factory v Microsoft Fabric, řešení pro analýzy typu all-in-one pro podniky. Microsoft Fabric zahrnuje všechno od přesunu dat až po datové vědy, analýzy v reálném čase, business intelligence a vytváření sestav. Přečtěte si, jak začít používat novou zkušební verzi zdarma.

Při kopírování dat ze zdroje do cílového úložiště poskytuje aktivita kopírování určitou úroveň odolnosti proti chybám, aby se zabránilo přerušení v průběhu přesunu dat. Kopírujete například miliony řádků ze zdroje do cílového úložiště, kde byl v cílové databázi vytvořen primární klíč, ale zdrojová databáze nemá definované žádné primární klíče. Při kopírování duplicitních řádků ze zdroje do cíle dojde k selhání porušení infrastruktury veřejných klíčů v cílové databázi. V tuto chvíli vám aktivita kopírování nabízí dva způsoby, jak tyto chyby zpracovat:

  • Aktivitu kopírování můžete přerušit, jakmile dojde k nějaké chybě.
  • Zbytek můžete dál kopírovat tím, že povolíte odolnost proti chybám a přeskočí nekompatibilní data. V tomto případě například přeskočte duplicitní řádek. Kromě toho můžete vynechaná data protokolovat povolením protokolu relace v rámci aktivity kopírování. Další podrobnosti najdete v protokolu relace v aktivitě kopírování.

Kopírování binárních souborů

Služba podporuje následující scénáře odolnosti proti chybám při kopírování binárních souborů. Můžete se rozhodnout přerušit aktivitu kopírování nebo pokračovat ve kopírování zbytku v následujících scénářích:

  1. Soubory, které má služba zkopírovat, jsou současně odstraněny jinými aplikacemi.
  2. Některé konkrétní složky nebo soubory neumožňují přístup ke službě, protože seznamy ACL těchto souborů nebo složek vyžadují vyšší úroveň oprávnění než nakonfigurované informace o připojení.
  3. Pokud povolíte nastavení ověření konzistence dat, jeden nebo více souborů není ověřeno, aby byly konzistentní mezi zdrojovým a cílovým úložištěm.

Povolení odolnosti proti chybám pomocí uživatelského rozhraní

Pokud chcete nakonfigurovat odolnost proti chybám v aktivita Copy v kanálu s uživatelským rozhraním, proveďte následující kroky:

  1. Pokud jste ještě nevytvořili aktivita Copy pro kanál, vyhledejte v podokně Aktivity kanálu kopírování a přetáhněte aktivitu kopírování dat na plátno kanálu.

  2. Vyberte novou aktivitu kopírování dat na plátně, pokud ještě není vybraná, a na kartě Nastavení nakonfigurujte odolnost proti chybám.

    Zobrazuje uživatelské rozhraní aktivity kopírování dat na kartě Nastavení se zvýrazněnou konfigurací odolnosti proti chybám.

Konfigurace

Při kopírování binárních souborů mezi úložišti úložiště můžete povolit odolnost proti chybám následujícím postupem:

{
  "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/"
      }
    }
  }
}
Vlastnost Popis Povolené hodnoty Požaduje se
skipErrorFile Skupina vlastností, která určuje typy selhání, které chcete přeskočit během přesunu dat. No
fileMissing Jeden z párů klíč-hodnota v rámci skipErrorFile taška vlastností určit, jestli chcete přeskočit soubory, které jsou odstraněny jinými aplikacemi v době, kdy služba provádí operaci kopírování.
-True: Zbytek chcete zkopírovat přeskočením souborů odstraněných jinými aplikacemi.
- Ne: chcete aktivitu kopírování přerušit, jakmile se všechny soubory odstraní ze zdrojového úložiště uprostřed přesunu dat.
Mějte na paměti, že tato vlastnost je nastavena na true jako výchozí.
True(výchozí)
False
No
fileForbidden Jeden z párů klíč-hodnota v rámci řetězce vlastností skipErrorFile k určení, jestli chcete přeskočit konkrétní soubory, když seznamy ACL těchto souborů nebo složek vyžadují vyšší úroveň oprávnění než nakonfigurované připojení.
-True: Zbytek chcete zkopírovat přeskočením souborů.
- Ne: Chcete přerušit aktivitu kopírování, jakmile se problém s oprávněními u složek nebo souborů zobrazí.
Pravdivý
False (výchozí)
No
dataInconsistency Jeden z párů klíč-hodnota v rámci řetězce vlastností skipErrorFile k určení, jestli chcete přeskočit nekonzistentní data mezi zdrojem a cílovým úložištěm.
-True: Zbytek chcete zkopírovat přeskočením nekonzistentních dat.
– Nepravda: Chcete přerušit aktivitu kopírování, jakmile se najdou nekonzistentní data.
Mějte na paměti, že tato vlastnost je platná pouze při nastavení validateDataConsistency jako True.
Pravdivý
False (výchozí)
No
invalidFileName Jeden z párů klíč-hodnota v rámci řetězce vlastností skipErrorFile k určení, jestli chcete přeskočit konkrétní soubory, pokud jsou názvy souborů pro cílové úložiště neplatné.
-True: Zbytek chcete zkopírovat tak, že přeskočíte soubory s neplatnými názvy souborů.
- Nepravda: Chcete aktivitu kopírování přerušit, jakmile mají všechny soubory neplatné názvy souborů.
Mějte na paměti, že tato vlastnost funguje při kopírování binárních souborů z libovolného úložiště do ADLS Gen2 nebo kopírování binárních souborů z AWS S3 do libovolného úložiště pouze.
Pravdivý
False (výchozí)
No
LogSettings Skupinu vlastností, které lze zadat, když chcete protokolovat přeskočené názvy objektů.   No
linkedServiceName Propojená služba Azure Blob Storage nebo Azure Data Lake Storage Gen2 pro ukládání souborů protokolu relací. Názvy AzureBlobStorage propojené služby nebo AzureBlobFS typu, které odkazují na instanci, kterou používáte k uložení souboru protokolu. No
path Cesta k souborům protokolu. Zadejte cestu, kterou používáte k ukládání souborů protokolu. Pokud nezadáte cestu, služba za vás vytvoří kontejner. No

Poznámka:

Následující podmínky jsou předpokladem povolení odolnosti proti chybám v aktivitě kopírování při kopírování binárních souborů. Při přeskočení konkrétních souborů při jejich odstranění ze zdrojového úložiště:

  • Zdrojová datová sada a datová sada jímky musí být binární formát a typ komprese nelze zadat.
  • Podporované typy úložišť dat jsou Azure Blob Storage, Azure Data Lake Storage Gen1, Azure Data Lake Storage Gen2, Azure Files, File System, FTP, SFTP, Amazon S3, Google Cloud Storage a HDFS.
  • Pouze pokud zadáte více souborů ve zdrojové datové sadě, což může být složka, zástupný znak nebo seznam souborů, aktivita kopírování může přeskočit konkrétní chybové soubory. Pokud je ve zdrojové datové sadě zadaný jeden soubor, který se má zkopírovat do cíle, aktivita kopírování selže, pokud dojde k nějaké chybě.

Pro přeskočení konkrétních souborů v případě, že jejich přístup není ve zdrojovém úložišti zakázaný:

  • Zdrojová datová sada a datová sada jímky musí být binární formát a typ komprese nelze zadat.
  • Podporované typy úložiště dat jsou Azure Blob Storage, Azure Data Lake Storage Gen1, Azure Data Lake Storage Gen2, Azure Files, SFTP, Amazon S3 a HDFS.
  • Pouze pokud zadáte více souborů ve zdrojové datové sadě, což může být složka, zástupný znak nebo seznam souborů, aktivita kopírování může přeskočit konkrétní chybové soubory. Pokud je ve zdrojové datové sadě zadaný jeden soubor, který se má zkopírovat do cíle, aktivita kopírování selže, pokud dojde k nějaké chybě.

Pokud chcete určité soubory přeskočit, když jsou ověřené, že nejsou mezi zdrojovým a cílovým úložištěm nekonzistentní:

  • Další podrobnosti najdete v dokumentaci ke konzistenci dat.

Sledování

Výstup z aktivity kopírování

Počet souborů, které se čtou, zapisují a přeskočí, můžete získat prostřednictvím výstupu každého spuštění aktivity kopírování.

"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" 
           } 
        }

Protokol relace z aktivity kopírování

Pokud nakonfigurujete protokolování názvů přeskočených souborů, najdete soubor protokolu z této cesty: https://[your-blob-account].blob.core.windows.net/[path-if-configured]/copyactivity-logs/[copy-activity-name]/[copy-activity-run-id]/[auto-generated-GUID].csv.

Soubory protokolu musí být soubory CSV. Schéma souboru protokolu je následující:

Sloupec Popis
Časové razítko Časové razítko, kdy se soubor přeskočil.
Level Úroveň protokolu této položky. U položky, která zobrazuje přeskočení souboru, bude na úrovni Upozornění.
OperationName aktivita Copy provozní chování jednotlivých souborů. Bude to FileSkip k určení souboru, který se má přeskočit.
OperationItem Názvy souborů, které se mají přeskočit.
Zpráva Další informace, které ilustrují, proč se soubor přeskočí

Příklad souboru protokolu je následující:

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,'." 

Z výše uvedeného protokolu vidíte, že bigfile.csv se vynechal kvůli jiné aplikaci, která tento soubor odstranila, když ji služba zkopírovala. A 3_nopermission.txt se přeskočil, protože služba nemá povolený přístup kvůli problému s oprávněním.

Kopírování tabulkových dat

Podporované scénáře

aktivita Copy podporuje tři scénáře pro detekci, přeskočení a protokolování nekompatibilních tabulkových dat:

  • Nekompatibilitu mezi zdrojovým datovým typem a nativním typem jímky.

    Příklad: Kopírování dat ze souboru CSV v úložišti objektů blob do databáze SQL s definicí schématu, která obsahuje tři sloupce typu INT. Řádky souboru CSV, které obsahují číselná data, například 123 456 789, se úspěšně zkopírují do úložiště jímky. Řádky, které obsahují nečíselné hodnoty, například 123 456, se ale zjistí jako nekompatibilní a přeskočí se.

  • Neshoda počtu sloupců mezi zdrojem a jímkou

    Příklad: Kopírování dat ze souboru CSV v úložišti objektů blob do databáze SQL s definicí schématu, která obsahuje šest sloupců. Řádky souboru CSV, které obsahují šest sloupců, se úspěšně zkopírují do úložiště jímky. Řádky souboru CSV, které obsahují více než šest sloupců, se zjistí jako nekompatibilní a přeskočí se.

  • Porušení primárního klíče při zápisu na SQL Server, Azure SQL Database nebo Azure Cosmos DB

    Příklad: Kopírování dat ze serveru SQL do databáze SQL. Primární klíč je definován v databázi SQL jímky, ale žádný takový primární klíč není definován na zdrojovém SQL serveru. Duplicitní řádky, které existují ve zdroji, nelze zkopírovat do jímky. aktivita Copy zkopíruje do jímky pouze první řádek zdrojových dat. Následující zdrojové řádky, které obsahují duplicitní hodnotu primárního klíče, jsou zjištěny jako nekompatibilní a přeskočeny.

Poznámka:

  • Pokud chcete načíst data do Azure Synapse Analytics pomocí PolyBase, nakonfigurujte nastavení nativní odolnosti proti chybám PolyBase zadáním zásad odmítnutí prostřednictvím polyBaseSettings v aktivitě kopírování. Stále můžete povolit přesměrování nekompatibilních řádků PolyBase na objekt blob nebo ADLS jako normální, jak je znázorněno níže.
  • Tato funkce se nevztahuje, pokud je aktivita kopírování nakonfigurovaná tak, aby vyvolala Amazon Redshift Unload.
  • Tato funkce se nevztahuje, pokud je aktivita kopírování nakonfigurovaná tak, aby vyvolala uloženou proceduru z jímky SQL nebo k zápisu dat do jímky SQL.

Konfigurace

Následující příklad obsahuje definici JSON pro konfiguraci vynechání nekompatibilních řádků v aktivitě kopírování:

"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/"
        }
    } 
}, 
Vlastnost Popis Povolené hodnoty Požaduje se
enableSkipIncompatibleRow Určuje, jestli se mají během kopírování přeskočit nekompatibilní řádky. True
False (výchozí)
No
LogSettings Skupina vlastností, které lze zadat, když chcete protokolovat nekompatibilní řádky.   No
linkedServiceName Propojená služba Azure Blob Storage nebo Azure Data Lake Storage Gen2 pro ukládání protokolu, který obsahuje přeskočené řádky. Názvy AzureBlobStorage propojené služby nebo AzureBlobFS typu, které odkazují na instanci, kterou používáte k uložení souboru protokolu. No
path Cesta k souborům protokolu, které obsahují přeskočené řádky. Zadejte cestu, kterou chcete použít k protokolování nekompatibilních dat. Pokud nezadáte cestu, služba za vás vytvoří kontejner. No

Monitorování přeskočených řádků

Po dokončení spuštění aktivity kopírování uvidíte počet přeskočených řádků ve výstupu aktivity kopírování:

"output": {
            "dataRead": 95,
            "dataWritten": 186,
            "rowsCopied": 9,
            "rowsSkipped": 2,
            "copyDuration": 16,
            "throughput": 0.01,
            "logFilePath": "myfolder/a84bf8d4-233f-4216-8cb5-45962831cd1b/",
            "errors": []
        },

Pokud nakonfigurujete protokolování nekompatibilních řádků, najdete soubor protokolu z této cesty: https://[your-blob-account].blob.core.windows.net/[path-if-configured]/copyactivity-logs/[copy-activity-name]/[copy-activity-run-id]/[auto-generated-GUID].csv.

Soubory protokolu budou soubory CSV. Schéma souboru protokolu je následující:

Sloupec Popis
Časové razítko Časové razítko při vynechání nekompatibilních řádků
Level Úroveň protokolu této položky. Pokud tato položka zobrazuje přeskočené řádky, bude na úrovni Upozornění.
OperationName aktivita Copy provozní chování na každém řádku. Bude to TabularRowSkip, aby bylo možné určit, že konkrétní nekompatibilní řádek byl vynechán.
OperationItem Přeskočené řádky ze zdrojového úložiště dat
Zpráva Další informace, které ilustrují nekompatibilitu tohoto konkrétního řádku.

Příklad obsahu souboru protokolu je následující:

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

Z výše uvedeného ukázkového souboru protokolu vidíte, že jeden řádek "data1, data2, data3" byl vynechán kvůli problému s převodem typu ze zdroje do cílového úložiště. Další řádek "data4, data5, data6" byl vynechán kvůli problému s porušením pk ze zdroje do cílového úložiště.

Kopírování tabulkových dat (starší verze):

Následující přístup představuje starší způsob, jak povolit odolnost proti chybám pouze při kopírování tabulkových dat. Pokud vytváříte nový kanál nebo aktivitu, doporučujeme začít odsud.

Konfigurace

Následující příklad obsahuje definici JSON pro konfiguraci vynechání nekompatibilních řádků v aktivitě kopírování:

"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"
     }
}
Vlastnost Popis Povolené hodnoty Požaduje se
enableSkipIncompatibleRow Určuje, jestli se mají během kopírování přeskočit nekompatibilní řádky. True
False (výchozí)
No
redirectIncompatibleRowSettings Skupina vlastností, které lze zadat, když chcete protokolovat nekompatibilní řádky.   No
linkedServiceName Propojená služba Azure Storage nebo Azure Data Lake Store pro ukládání protokolu, který obsahuje přeskočené řádky. Názvy AzureStorage propojené služby nebo AzureDataLakeStore typu, které odkazují na instanci, kterou chcete použít k uložení souboru protokolu. No
path Cesta k souboru protokolu, který obsahuje přeskočené řádky. Zadejte cestu, kterou chcete použít k protokolování nekompatibilních dat. Pokud nezadáte cestu, služba za vás vytvoří kontejner. No

Monitorování přeskočených řádků

Po dokončení spuštění aktivity kopírování uvidíte počet přeskočených řádků ve výstupu aktivity kopírování:

"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": []
        },

Pokud nakonfigurujete protokolování nekompatibilních řádků, najdete soubor protokolu v této cestě: https://[your-blob-account].blob.core.windows.net/[path-if-configured]/[copy-activity-run-id]/[auto-generated-GUID].csv.

Soubory protokolu můžou být jenom soubory CSV. Původní přeskočená data se v případě potřeby zaprotokolují čárkou jako oddělovačem sloupců. Do původního zdrojového souboru v souboru protokolu přidáme dva další sloupce ErrorCode a ErrorMessage, kde uvidíte původní příčinu nekompatibility. ErrorCode a ErrorMessage budou citovány dvojitými uvozovkami.

Příklad obsahu souboru protokolu je následující:

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

Podívejte se na další články o aktivitě kopírování: