コピー アクティビティでのデータ整合性の検証

適用対象: Azure Data Factory Azure Synapse Analytics

ヒント

企業向けのオールインワン分析ソリューション、Microsoft Fabric の Data Factory をお試しください。 Microsoft Fabric は、データ移動からデータ サイエンス、リアルタイム分析、ビジネス インテリジェンス、レポートまで、あらゆるものをカバーしています。 無料で新しい試用版を開始する方法について説明します。

ソースからコピー先ストアにデータを移動するとき、Copy アクティビティでは、データがソースからコピー先ストアに正常にコピーされただけでなく、ソースとコピー先ストアの間の整合性も確保されていることを確認するための、さらなるデータ整合性検証を行うこともできます。 データの移動中に整合性のないファイルが検出されたら、コピー アクティビティを中止するか、またはフォールト トレランス設定を有効にして整合性のないファイルをスキップすることで、その他のデータをコピーし続けることができます。 スキップされたファイル名を取得するには、コピー アクティビティでセッション ログ設定を有効にします。 詳細については、「コピー アクティビティのセッション ログ」を参照してください。

サポートされているデータ ストアおよびシナリオ

  • データ整合性検証は、FTP、SFTP、HTTP、Snowflake、Office 365、 Azure Databricks Delta Lake を除くすべてのコネクタでサポートされています。
  • ステージング コピー シナリオでは、データ整合性の検証はサポートされていません。
  • バイナリ ファイルをコピーする場合は、コピー アクティビティで "PreserveHierarchy" 動作が設定されている場合にのみ、データ整合性の検証を使用できます。
  • データ整合性の検証を有効にし、単一のコピー アクティビティで複数のバイナリ ファイルをコピーする場合は、コピー アクティビティを中止するか、またはフォールト トレランス設定を有効にして整合性のないファイルをスキップすることで、残りのファイルをコピーし続けることができます。
  • データ整合性の検証を有効にし、単一のコピー アクティビティでテーブルをコピーする場合、コピー元から読み取られた行の数が、コピー先にコピーされた行の数とスキップされた互換性のない行の数の合計と異なると、コピー アクティビティは失敗します。

構成

次の例では、コピー アクティビティでデータ整合性の検証を有効にする JSON 定義を示します。

{
  "name":"CopyActivityDataConsistency",
  "type":"Copy",
  "typeProperties": { 
    "source": { 
        "type": "BinarySource", 
        "storeSettings": { 
            "type": "AzureDataLakeStoreReadSettings", 
            "recursive": true 
        } 
    }, 
    "sink": { 
        "type": "BinarySink", 
        "storeSettings": { 
            "type": "AzureDataLakeStoreWriteSettings" 
        } 
    }, 
    "validateDataConsistency": true, 
    "skipErrorFile": { 
        "dataInconsistency": true 
    }, 
    "logSettings": {
        "enableCopyActivityLog": true,
        "copyActivityLogSettings": {
            "logLevel": "Warning",
            "enableReliableLogging": false
        },
        "logLocationSettings": {
            "linkedServiceName": {
               "referenceName": "ADLSGen2",
               "type": "LinkedServiceReference"
            },
            "path": "sessionlog/"
        }
    }
} 
プロパティ 説明 使用できる値 必須
validateDataConsistency バイナリ ファイルのコピー時にこのプロパティに true を設定した場合、ソース ストアとコピー先ストアの間でのデータ整合性を確保するために、ソース ストアからコピー先ストアにコピーされた各バイナリ ファイルのファイル サイズ、lastModifiedDate、および MD5 チェックサムがコピー アクティビティにより確認されます。 表形式データをコピーする場合、コピー元から読み取られた行の合計数が、コピー先にコピーされた行の数とスキップされた互換性のない行の数の合計と同じになるように、ジョブの完了後にコピー アクティビティにより合計行数が確認されます。 このオプションを有効にすると、コピーのパフォーマンスが影響を受けることに注意してください。 True
False (既定値)
いいえ
dataInconsistency 整合性のないファイルをスキップするかどうかを指定する、skipErrorFile プロパティ バッグ内のキーと値のペアの 1 つです。
-True: 整合性のないファイルをスキップして、残りの部分をコピーします。
- False: 整合性のないファイルが見つかった場合、コピー アクティビティを中止します。
このプロパティは、バイナリ ファイルをコピーしていて validateDataConsistency を True に設定した場合にのみ有効であることに注意してください。
True
False (既定値)
いいえ
logSettings スキップされたファイルをセッション ログでログに記録できるようにするために指定できるプロパティのグループです。 いいえ
linkedServiceName セッション ログ ファイルを格納するための、Azure Blob Storage または Azure Data Lake Storage Gen2 のリンクされたサービスです。 AzureBlobStorage または AzureBlobFS 型のリンクされたサービスの名前。これは、ログ ファイルを格納するために使用するインスタンスを示します。 いいえ
path ログ ファイルのパス。 ログ ファイルを格納するパスを指定します。 パスを指定しないと、サービスによってコンテナーが作成されます。 いいえ

Note

  • Azure Blob または Azure Data Lake Storage Gen2 との間でバイナリ ファイルをコピーするとき、サービスでは、Azure Blob APIAzure Data Lake Storage Gen2 API を活用し、ブロック レベル MD5 チェックサム検証が行われます。 ファイル上の ContentMD5 がデータ ソースとして Azure Blob または Azure Data Lake Storage Gen2 に存在する場合、サービスでは、ファイルも読み取った後に、レベル MD5 チェックサム検証がファイリングされます。 データのコピー先として Azure Blob または Azure Data Lake Storage Gen2 にファイルをコピーした後、サービスでは、Azure Blob または Azure Data Lake Storage Gen2 に ContentMD5 が書き込まれ、データの一貫性検証のために下流のアプリケーションでさらに利用できます。
  • サービスでは、ストレージ ストア間でバイナリ ファイルをコピーするとき、ファイル サイズ検証が行われます。

監視

コピー アクティビティからの出力

コピー アクティビティが完全に実行された後、各コピー アクティビティの実行の出力から、データ整合性検証の結果を確認できます。

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

データ整合性の検証の詳細は、"dataConsistencyVerification プロパティ" から確認できます。

VerificationResult の値:

  • Verified: コピーしたデータは、ソース ストアとコピー先ストアとの間で整合性があることが確認されています。
  • NotVerified: コピー アクティビティで validateDataConsistency が有効になっていないため、コピーしたデータの整合性が検証されていません。
  • Unsupported: この特定のコピー ペアでは、データの整合性の確認がサポートされていないため、コピーしたデータの整合性が検証されていません。

InconsistentData の値:

  • Found: Copy アクティビティで、整合性のないデータが検出されました。
  • Skipped: Copy アクティビティで、整合性のないデータが検出され、スキップされました。
  • None: Copy アクティビティで、整合性のないデータは検出されませんでした。 ソース ストアとコピー先ストアの間でデータの整合性があることが確認されたか、またはコピー アクティビティで validateDataConsistency を無効にしたためである可能性があります。

コピー アクティビティからのセッション ログ

整合性のないファイルをログに記録するように構成した場合は、https://[your-blob-account].blob.core.windows.net/[path-if-configured]/copyactivity-logs/[copy-activity-name]/[copy-activity-run-id]/[auto-generated-GUID].csv のパスからログ ファイルを見つけることができます。 ログ ファイルは csv ファイルになります。

ログ ファイルのスキーマは次のとおりです。

説明
Timestamp サービス整合性のないファイルをスキップしたときのタイムスタンプ。
Level この項目のログ レベル。 ファイルのスキップを示す項目は、'Warning' レベルになります。
OperationName 各ファイルでの Copy アクティビティの実行動作。 スキップされるファイルを指定する場合は 'FileSkip' になります。
OperationItem スキップされるファイル名。
Message ファイルがスキップされた理由を示す詳細情報。

ログ ファイルの例を次に示します。

Timestamp, Level, OperationName, OperationItem, Message
2020-02-26 06:22:56.3190846, Warning, FileSkip, "sample1.csv", "File is skipped after read 548000000 bytes: ErrorCode=DataConsistencySourceDataChanged,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=Source file 'sample1.csv' is changed by other clients during the copy activity run.,Source=,'." 

上記のログ ファイルから、sample1.csv がスキップされたことを確認できます。これは、ソース ストアとコピー先ストアの間で、整合性があることを確認できなかったためです。 sample1.csv が不整合になった詳しい理由として、Copy アクティビティによってファイルがコピーされていたのと同時に、他のアプリケーションによってそれが変更されていたためであることがわかります。

コピー アクティビティの他の記事を参照してください。