適用対象:
Azure Data Factory
Azure Synapse Analytics
ヒント
Data Factory in Microsoft Fabric は、よりシンプルなアーキテクチャ、組み込みの AI、および新機能を備えた次世代のAzure Data Factoryです。 データ統合を初めて使用する場合は、Fabric Data Factory から始めます。 既存の ADF ワークロードをFabricにアップグレードして、データ サイエンス、リアルタイム分析、レポートの新機能にアクセスできます。
マッピング データ フローを使用する場合の Data Factory の一般的なシナリオは、変換されたデータを Azure SQL Database 内のデータベースに書き込む場合です。 このシナリオでは一般に、列の切り捨てが起こりやすく、そのようなエラー状態は回避する必要があります。
ADF データ フロー内のデータベース シンクにデータを書き込むときにエラーを処理するには、主に 2 つの方法があります。
- データベース データを処理するときに、シンクのエラー行の処理を [エラーのまま続行する] に設定します。 これは、データ フロー内でカスタム ロジックを必要としない、包括的な自動化された方法です。
- または、次の手順に従って、書き込み先の文字列型列に収まらない列をログに記録するしくみを作れば、データ フローを続行することができます。
注意
独自のエラー処理ロジックを記述する方法ではなく、エラー行の自動処理を有効にすると、エラーを捕捉するためにデータファクトリが2段階の操作を実行する必要があるため、若干のパフォーマンス低下が発生します。
シナリオ
書き込み先のデータベース テーブルには、"name" という
nvarchar(5)列があります。データ フロー内で、映画のタイトルをシンクから書き込み先の "name" 列にマッピングしたいと考えています。
問題は、シンク列に格納できる文字数が 5 文字までであり、映画のタイトルが入りきらないケースがありそうだということです。 このデータ フローを実行すると、次のようなエラーが発生します:
"Job failed due to reason: DF-SYS-01 at Sink 'WriteToDatabase': java.sql.BatchUpdateException: String or binary data would be truncated. java.sql.BatchUpdateException: String or binary data would be truncated."
このビデオでは、データ フローにエラー行の処理ロジックを設定する例を紹介しています。
この状況を回避する設計方法
このシナリオでは、"name" 列の最大長は 5 文字です。 そこで、条件分割変換を追加して、"titles" が 5 文字を超える行はログに記録し、スペースに格納できる他の行についてはデータベースに書き込むことができるようにしてみましょう。
この条件分割変換では、"title" の最大長を 5 として定義しています。 5 文字以下の行は
GoodRowsストリームに送信されます。 5 文字を超える行はBadRowsストリームに送信されます。今度は、失敗した行をログに記録する必要があります。
BadRowsストリームに、ログのためのシンク変換を追加します。 ここでは、完全なトランザクション レコードのログが得られるよう、すべてのフィールドを "自動マッピング" します。 これは、Blob Storage内の 1 つのファイルへのテキスト区切りの CSV ファイル出力です。 このログ ファイルを "badrows.csv" と呼ぶことにしましょう。
完成したデータ フローは次のとおりです。 エラー行を切り離すことで SQL 切り捨てエラーを回避し、それらのエントリをログ ファイルに出力できるようになりました。 その一方で、成功した行は、引き続きターゲット データベースに書き込むことができます。
シンク変換でエラー行処理オプションを選択し、[エラー行の出力] を設定すると、Azure Data Factoryは、ドライバーから報告されたエラー メッセージと共に行データの CSV ファイル出力を自動的に生成します。 別のオプションを使用して、そのロジックをデータ フローに手動で追加する必要はありません。 このオプションを使用すると、若干のパフォーマンス低下はありますが、その代わりに ADF はエラーを捕捉しログするための2フェーズの手法を実装することができます。
関連するコンテンツ
- マッピング データ フローの変換を使用して、残りのデータ フロー ロジックを構築します。