失敗した U-SQL ジョブに対するユーザー定義の C# コードをデバッグする

重要

Azure Data Lake Analyticsは、2024 年 2 月 29 日に廃止されました。 詳細については、このお知らせを参照してください。

データ分析の場合、organizationは Azure Synapse Analytics または Microsoft Fabric を使用できます。

U-SQL は C# を使用した機能拡張モデルを提供しています。 U-SQL スクリプトでは、C# 関数を呼び出して、SQL に似た宣言型言語ではサポートされていない分析関数を簡単に実行できます。 U-SQL 機能拡張の詳細については、「U-SQL プログラミング ガイド」を参照してください。

実際には、どのコードでもデバッグが必要になる可能性がありますが、ログ ファイルが限られているクラウド上のカスタム コードを使用して分散ジョブをデバッグするのは困難です。 Azure Data Lake Tools for Visual Studio には失敗した頂点のデバッグと呼ばれる機能が用意されており、カスタム コードで発生したエラーをより簡単にデバッグするのに役立ちます。 U-SQL ジョブが失敗すると、サービスではエラーの状態が維持されます。このツールは、クラウドのエラー環境をローカル マシンにダウンロードしてデバッグするうえで役立ちます。 ローカルのダウンロードには、入力データとユーザー コードを含むクラウド環境全体がキャプチャされています。

次のビデオでは、Azure Data Lake Tools for Visual Studio の失敗した頂点のデバッグ機能をデモンストレーションします。

重要

Visual Studio でこの機能を使用するには、Microsoft Visual C++ 2015 再頒布可能パッケージ Update 3Windows ユニバーサル C ランタイムの 2 つの更新プログラムが必要です。

失敗した頂点をローカル コンピューターにダウンロードする

Azure Data Lake Tools for Visual Studio で失敗したジョブを開くと、詳細なエラー メッセージが記載された警告バーがエラー タブに表示されます。

  1. [ ダウンロード ] を選択して、必要なすべてのリソースと入力ストリームをダウンロードします。 ダウンロードが完了しない場合は、[再試行] を選択 します

  2. ダウンロードが完了したら [ 開く ] を選択して、ローカル デバッグ環境を生成します。 新しいデバッグ ソリューションが開きます。Visual Studio で既存のソリューションを開いている場合は、デバッグする前に必ず保存してから閉じてください。

USQL のData Lake Analytics ジョブのスクリーンショット。[ダウンロード] ボタンが強調表示されています。

デバッグ環境を構成する

Note

デバッグする前に、[例外設定] ウィンドウ (Ctrl + Alt + E) で [Common Language Runtime Exceptions]\(共通言語ランタイム例外\) をチェックしてください。

共通言語ランタイム例外が設定された例外設定を示す、ユーザー定義の C# ソース コードのスクリーンショット。

新しく起動された Visual Studio インスタンスでは、ユーザー定義の C# ソース コードが見つかる場合と見つからない場合があります。

  1. ソリューションでソース コードを見つけることができる

  2. ソリューションにソース コードが見つかりません

ソース コードがデバッグ ソリューションに含まれている

C# ソース コードがキャプチャされるケースは 2 つあります。

  1. ユーザー コードは、分離コード ファイルで定義されています (通常、U-SQL プロジェクトでは Script.usql.cs という名前です)。

  2. ユーザー コードは、U-SQL アプリケーションの C# クラス ライブラリ プロジェクトで定義され、アセンブリとしてデバッグ情報に登録されます。

ソース コードがソリューションにインポートされている場合、Visual Studio のデバッグ ツール (ウォッチ、変数など) を使用して、問題のトラブルシューティングを行うことができます。

  1. F5 キーを押してデバッグを開始します。 コードは、例外によって停止されるまで実行されます。

  2. ソース コード ファイルを開いて、ブレークポイントを設定してから、F5 キーを押して、ステップ バイ ステップでコードをデバッグします。

    ブレークポイントが設定されたユーザー定義コードのスクリーンショット。強調表示された行に例外が表示されています。

ソース コードはデバッグ ソリューションに含まれていません

ユーザー コードが分離コード ファイルに含まれていない場合、またはアセンブリを デバッグ情報に登録しなかった場合、ソース コードはデバッグ ソリューションに自動的に含まれません。 この場合は、ソース コードを追加する手順が別に必要になります。

  1. [ソリューション 'VertexDebug'] を右クリック > [追加] > [既存のプロジェクト] の順に選択し、アセンブリのソース コードを検索し、プロジェクトをデバッグ ソリューションに追加します。

    Visual Studio のソリューション エクスプローラーのスクリーンショット。VertexDebug ソリューションが表示されています。

  2. FailedVertexDebugHost プロジェクトのプロジェクト フォルダー パスを取得します。

  3. 追加されたアセンブリのソース コード プロジェクトを右クリック > [プロパティ] で、左側にある [ビルド] タブを選択し、末尾が \bin\debug のコピーしパスを [出力] > [出力パス] に貼り付けます。 最終的な出力パスは次のようになります。<DataLakeTemp path>\fd91dd21-776e-4729-a78b-81ad85a4fba6\loiu0t1y.mfo\FailedVertexDebug\FailedVertexDebugHost\bin\Debug\

    Visual Studio Code の [ビルド] タブのスクリーンショット。出力の下で送信パスが強調表示されています。

この設定の後、F5 キーとブレークポイントを使用してデバッグを開始します。 Visual Studio のデバッグ ツール (ウォッチ、変数など) を使用して、問題をトラブルシューティングすることもできます。

Note

コードを変更して更新された PDB ファイルを生成するたびに、アセンブリのソース コード プロジェクトをリビルドします。

ジョブを再送信する

デバッグが終了し、プロジェクトが正常に完了すると、出力ウィンドウに次のメッセージが表示されます。

The Program 'LocalVertexHost.exe' has exited with code 0 (0x0).

入力候補行が強調表示されている出力ウィンドウのスクリーンショット。

失敗したジョブを再送信するには:

  1. 分離コード ソリューションのジョブの場合は、C# コードを、分離コードのソース ファイル (通常は Script.usql.cs) に コピーします。

  2. アセンブリのジョブの場合は、デバッグ ソリューションで、アセンブリ ソース コード プロジェクトを右クリックし、更新された .dll アセンブリを Azure Data Lake カタログに登録します。

  3. U-SQL ジョブを再送信します。

次のステップ