Azure Data Factory のコピー アクティビティのフォールト トレランスFault tolerance of copy activity in Azure Data Factory

Azure Data Factory のコピー アクティビティには、ソースとシンク データ ストアの間でデータをコピーするときに互換性のない行を処理するための 2 つの方法が用意されています。The copy activity in Azure Data Factory offers you two ways to handle incompatible rows when copying data between source and sink data stores:

  • 互換性のないデータが検出されたときに、コピー アクティビティを中止して停止させることができます (既定の動作)。You can abort and fail the copy activity when incompatible data is encountered (default behavior).
  • フォールト トレランスを追加して互換性のないデータ行をスキップすることで、すべてのデータのコピーを続行できます。You can continue to copy all of the data by adding fault tolerance and skipping incompatible data rows. また、Azure Blob Storage または Azure Data Lake Store 内の互換性のない行をログに記録することもできます。In addition, you can log the incompatible rows in Azure Blob storage or Azure Data Lake Store. そうすることで、ログを調査して失敗の原因を確認し、データ ソースの問題のあるデータを修正してから、コピー アクティビティをもう一度実行できます。You can then examine the log to learn the cause for the failure, fix the data on the data source, and retry the copy activity.

サポートされるシナリオSupported scenarios

コピー アクティビティでは、検出、スキップ、および互換性のないデータのログ記録の 3 つのシナリオをサポートします。Copy Activity supports three scenarios for detecting, skipping, and logging incompatible data:

  • ソース データの型とシンクのネイティブ型の間の非互換性Incompatibility between the source data type and the sink native type.

    例: Blob Storage 内の CSV ファイルから、INT 型の 3 つの列を含むスキーマ定義を持つ SQL データベースにデータをコピーします。For example: Copy data from a CSV file in Blob storage to a SQL database with a schema definition that contains three INT type columns. 数値データを含む CSV ファイルの行 (123,456,789 など) はシンク ストアに正常にコピーされます。The CSV file rows that contain numeric data, such as 123,456,789 are copied successfully to the sink store. ただし、数値以外を含む行 (123,456, abc など) は互換性のない行として検出され、スキップされます。However, the rows that contain non-numeric values, such as 123,456, abc are detected as incompatible and are skipped.

  • ソースとシンクの間での列数の不一致Mismatch in the number of columns between the source and the sink.

    例: Blob Storage 内の CSV ファイルから、6 つの列を含むスキーマ定義を持つ SQL データベースにデータをコピーします。For example: Copy data from a CSV file in Blob storage to a SQL database with a schema definition that contains six columns. 6 つの列を含む CSV ファイルの行が、シンク ストアに正常にコピーされます。The CSV file rows that contain six columns are copied successfully to the sink store. 含まれる列の数が 6 つでない CSV ファイルの行は、互換性のないものとして検出され、スキップされます。The CSV file rows that contain more or fewer than six columns are detected as incompatible and are skipped.

  • SQL Server/Azure SQL Database/Azure Cosmos DB への書き込み時の主キー違反Primary key violation when writing to SQL Server/Azure SQL Database/Azure Cosmos DB.

    例: データを SQL サーバーから SQL データベースにコピーします。For example: Copy data from a SQL server to a SQL database. シンクの SQL データベースでは主キーが定義されていますが、ソースの SQL サーバーではそのような主キーは定義されていません。A primary key is defined in the sink SQL database, but no such primary key is defined in the source SQL server. ソースに存在する重複している行は、シンクにはコピーできません。The duplicated rows that exist in the source cannot be copied to the sink. コピー アクティビティでは、ソース データの最初の行のみがシンクにコピーされます。Copy Activity copies only the first row of the source data into the sink. それ以降のソース行に重複している主キーの値が含まれている場合、互換性のないものとして検出され、スキップされます。The subsequent source rows that contain the duplicated primary key value are detected as incompatible and are skipped.

注意

  • PolyBase を使用して SQL Data Warehouse にデータを読み込むには、コピー アクティビティの拒否ポリシーで "polyBaseSettings" を指定して PolyBase のネイティブ フォールト トレランス設定を構成します。For loading data into SQL Data Warehouse using PolyBase, configure PolyBase's native fault tolerance settings by specifying reject policies via "polyBaseSettings" in copy activity. PolyBase 互換性のない行は、次に示すように、通常どおり Blob または ADLS へのリダイレクトを有効にできます。You can still enable redirecting PolyBase incompatible rows to Blob or ADLS as normal as shown below.
  • コピー アクティビティが Amazon Redshift Unload を呼び出すように構成されている場合、この機能は適用されません。This feature doesn't apply when copy activity is configured to invoke Amazon Redshift Unload.
  • コピー アクティビティが SQL シンクからストアド プロシージャを呼び出すように構成されている場合、この機能は適用されません。This feature doesn't apply when copy activity is configured to invoke a stored procedure from a SQL sink.

構成Configuration

次の例では、コピー アクティビティで互換性のない行をスキップするように構成する JSON 定義について説明します。The following example provides a JSON definition to configure skipping the incompatible rows in Copy Activity:

"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"
     }
}
プロパティProperty 説明Description 使用できる値Allowed values 必須Required
enableSkipIncompatibleRowenableSkipIncompatibleRow コピー中に互換性のない行をスキップするかどうかを指定します。Specifies whether to skip incompatible rows during copy or not. TrueTrue
False (既定値)False (default)
いいえNo
redirectIncompatibleRowSettingsredirectIncompatibleRowSettings 互換性のない行をログに記録するときに指定できるプロパティのグループ。A group of properties that can be specified when you want to log the incompatible rows.   いいえNo
linkedServiceNamelinkedServiceName スキップされる行が含まれたログを格納する Azure Storage または Azure Data Lake Store のリンク サービス。The linked service of Azure Storage or Azure Data Lake Store to store the log that contains the skipped rows. AzureStorage または AzureDataLakeStore 型のリンクされたサービスの名前。これは、ログ ファイルを格納するために使用するインスタンスを示します。The name of an AzureStorage or AzureDataLakeStore type linked service, which refers to the instance that you want to use to store the log file. いいえNo
pathpath スキップした行を含むログ ファイルのパス。The path of the log file that contains the skipped rows. 互換性のないデータをログに記録するパスを指定します。Specify the path that you want to use to log the incompatible data. パスを指定しないと、サービスによってコンテナーが作成されます。If you do not provide a path, the service creates a container for you. いいえNo

スキップされた行を監視するMonitor skipped rows

コピー アクティビティの実行が完了したら、コピー アクティビティの出力で、スキップされた行の数を次のように確認できます。After the copy activity run completes, you can see the number of skipped rows in the output of the copy activity:

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

互換性のない行をログに記録するように構成した場合は、パス https://[your-blob-account].blob.core.windows.net/[path-if-configured]/[copy-activity-run-id]/[auto-generated-GUID].csv でログ ファイルを見つけることができます。If you configure to log the incompatible rows, you can find the log file at this path: https://[your-blob-account].blob.core.windows.net/[path-if-configured]/[copy-activity-run-id]/[auto-generated-GUID].csv.

ログ ファイルは、csv のファイル形式のみです。The log files can only be the csv files. スキップされた元のデータは、必要に応じて、列区切り記号にコンマを使用して記録されます。The original data being skipped will be logged with comma as column delimiter if needed. 非互換性の根本原因を確認できるように、ログ ファイルの元のソース データに加えて、"ErrorCode" および "ErrorMessage" という 2 つの列を追加しています。We add two more columns "ErrorCode" and "ErrorMessage" in additional to the original source data in log file, where you can see the root cause of the incompatibility. ErrorCode および ErrorMessage は、二重引用符で囲まれます。The ErrorCode and ErrorMessage will be quoted by double quotes.

ログ ファイルの内容の例は次のとおりです。An example of the log file content is as follows:

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

次の手順Next steps

コピー アクティビティの他の記事を参照してください。See the other Copy Activity articles: