Important
Azure Stream Analytics の .Net Standard ユーザー定義関数は、2024 年 9 月 30 日に廃止されます。 その日付を過ぎると、この機能を使用できなくなります。 Azure Stream Analytics の JavaScript ユーザー定義関数 に移行してください。
Visual Studio で作成された C# ユーザー定義関数 (UDF) を使用すると、独自の関数を使用して Azure Stream Analytics クエリ言語を拡張できます。 既存のコード (DLL を含む) を再利用し、C# で数学的または複雑なロジックを使用できます。 UDF を実装するには、次の 3 つの方法があります。
- Stream Analytics プロジェクトの CodeBehind ファイル
- ローカル C# プロジェクトの UDF
- ストレージアカウントから既存パッケージのUDFを取得。
このチュートリアルでは、CodeBehind メソッドを使用して基本的な C# 関数を実装します。 Stream Analytics ジョブの UDF 機能は現在プレビュー段階であり、運用環境のワークロードでは使用しないでください。
このチュートリアルでは、以下の内容を学習します。
- CodeBehind を使用して C# ユーザー定義関数を作成します。
- Stream Analytics ジョブをローカルでテストします。
- ジョブを Azure に発行します。
[前提条件]
開始する前に、次の前提条件が満たされていることを確認してください。
- Azure サブスクリプションをお持ちでない場合は、無料アカウントを作成してください。
- Visual Studio 用の Stream Analytics ツールと、Azure 開発ワークロードまたはデータ ストレージワークロードと処理ワークロードをインストールします。
- IoT Edge ジョブを構築する場合は、既存の Stream Analytics Edge 開発ガイド を参照してください。
Azure ストレージ アカウントにコンテナーを作成する
作成したコンテナーは、コンパイル済みの C# パッケージを格納するために使用されます。 Edge ジョブを作成する場合、このストレージ アカウントは、IoT Edge デバイスにパッケージをデプロイするためにも使用されます。 Stream Analytics ジョブごとに専用コンテナーを使用します。 複数の Stream Analytics Edge ジョブに対して同じコンテナーを再利用することはサポートされていません。 既存のコンテナーを持つストレージ アカウントが既にある場合は、それらを使用できます。 そうでない場合は、 新しいコンテナーを作成する必要があります。
Visual Studio で Stream Analytics プロジェクトを作成する
Visual Studio を起動します。
[ ファイル] > [新しい > プロジェクト] を選択します。
左側のテンプレートの一覧で [ Stream Analytics] を選択し、[ Azure Stream Analytics Edge アプリケーション ] または [ Azure Stream Analytics アプリケーション] を選択します。
プロジェクト 名、 場所、 ソリューション名を入力し、[ OK] を選択します。
アセンブリ パッケージのパスを構成する
Visual Studio を開き、 ソリューション エクスプローラーに移動します。
ジョブ構成ファイルをダブルクリックし、
JobConfig.jsonします。User-Defined コード構成セクションを展開し、構成に次の推奨値を入力します。
設定 推奨値 グローバル ストレージ設定リソース 現在のアカウントからデータ ソースを選択する グローバル ストレージ設定サブスクリプション < サブスクリプション > グローバルストレージ設定 ストレージアカウント < ストレージ アカウント > カスタム コード ストレージ設定リソース 現在のアカウントからデータ ソースを選択する カスタムコードのストレージ設定用ストレージ・アカウント < ストレージ アカウント > カスタム コード ストレージ設定コンテナー < あなたのストレージ コンテナー >
CodeBehind を使用して C# UDF を記述する
CodeBehind ファイルは、1 つの ASA クエリ スクリプトに関連付けられた C# ファイルです。 Visual Studio ツールは、CodeBehind ファイルを自動的に zip 圧縮し、提出時に Azure ストレージ アカウントにアップロードします。 すべてのクラスを public として定義し、すべてのオブジェクトを 静的パブリックとして定義する必要があります。
ソリューション エクスプローラーでScript.asql を展開し、CodeBehind ファイルScript.asaql.csを見つけます。
コードを次のサンプルに置き換えます。
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; namespace ASAEdgeUDFDemo { public class Class1 { // Public static function public static Int64 SquareFunction(Int64 a) { return a * a; } } }
UDF を実装する
ソリューション エクスプローラーで、Script.asaql ファイルを開きます。
既存のクエリを次のクエリに置き換えます。
SELECT machine.temperature, udf.ASAEdgeUDFDemo_Class1_SquareFunction(try_cast(machine.temperature as bigint)) INTO Output FROM Input
ローカル テスト
温度シミュレーターのサンプル データ ファイルをダウンロードします。
ソリューション エクスプローラーで、[入力] を展開し、[Input.json] を右クリックし、[ローカル入力の追加] を選択します。
ダウンロードしたサンプル データのローカル入力ファイル パスを指定し 、保存します。
スクリプト エディターで [ ローカルで実行 ] をクリックします。 ローカル実行で出力結果が正常に保存されたら、任意のキーを押して結果を表形式で表示します。
[ 結果フォルダーを開く] を選択して、未加工のファイルを JSON 形式と CSV 形式で表示することもできます。
UDF をデバッグする
標準の C# コードをデバッグするのと同じ方法で、C# UDF をローカルでデバッグできます。
C# 関数にブレークポイントを追加します。
F5 キーを押してデバッグを開始します。 プログラムは、想定どおりにブレークポイントで停止します。
ジョブを Azure に発行する
クエリをローカルでテストしたら、スクリプト エディターで [ Submit to Azure]\(Azure に送信 \) を選択して、ジョブを Azure に発行します。
IoT Edge デバイスへのデプロイ
Stream Analytics Edge ジョブを構築することを選択した場合は、IoT Edge モジュールとしてデプロイできるようになりました。 IoT Edge クイック スタートに従って、IoT Hub を作成し、IoT Edge デバイスを登録し、デバイスに IoT Edge ランタイムをインストールして起動します。 次に、 ジョブのデプロイに 関するチュートリアルに従って、Stream Analytics ジョブを IoT Edge モジュールとしてデプロイします。
次のステップ
このチュートリアルでは、CodeBehind を使用して単純な C# ユーザー定義関数を作成し、ジョブを Azure に発行し、そのジョブを Azure または IoT Edge デバイスにデプロイしました。
Stream Analytics ジョブに C# ユーザー定義関数を使用するさまざまな方法の詳細については、次の記事に進んでください。