Azure IoT Operations のData flow graphs

データフローグラフは、Azure IoT Operationsを通過するデータを処理する設定可能なパイプラインです。 標準 的なデータフロー は固定されたエンリッチ、フィルタ、マップのシーケンスに従いますが、データフローグラフは任意の順序で変換を合成したり、並列パスに分岐したり、時間ウィンドウにデータを集約したりできます。

DataflowGraphKubernetesのカスタムリソースはデータフローグラフを定義しています。 リソース内で、ソース、変換、目的地を接続して、シナリオに合った処理パイプラインを構築します。

Important

データ フロー グラフでは現在、MQTT、Kafka、OpenTelemetry エンドポイントのみがサポートされています。 Data Lake、Microsoft Fabric OneLake、Azure Data Explorer、ローカル ストレージなどの他のエンドポイントの種類はサポートされていません。

データ フローとデータ フロー グラフ

Azure IoT Operations には、パイプライン内のデータを処理する 2 つの方法が用意されています。

能力 データ フロー データ フロー グラフ
パイプライン図形 修正済み: エンリッチ、フィルター、マップ 柔軟性: 任意の順序、分岐、統合
型の変換 マップ、フィルター、エンリッチ マッピング、フィルター、ブランチ、コンカテネート、ウィンドウ、スロットル、エンリッチ
時間ベースの集計 該当なし タンブリング ウィンドウを使用したウィンドウ変換
条件付きルーティング 該当なし 分岐変換と連結変換
エンドポイントのサポート すべてのエンドポイントの種類 MQTT、Kafka、OpenTelemetry のみ

サポートされているエンドポイントの種類を使用する新しいプロジェクトでは、データ フロー グラフをお勧めします。 データ フローはすべてのシナリオで完全にサポートされ、さまざまな種類のエンドポイントをサポートします。

使用可能な変換

各変換はルールで設定し、 DataflowGraph リソース内の他の変換と連鎖する既成処理ステップです。

変換 アーティファクト Description
地図 azureiotoperations/graph-dataflow-map:1.0.0 フィールドの名前変更、再構築、計算、およびコピーを行います。
フィルター azureiotoperations/graph-dataflow-filter:1.0.0 条件に一致するメッセージを削除します。
ブランチ azureiotoperations/graph-dataflow-branch:1.0.0 条件に基づいて、各メッセージを true または false パスにルーティングします。
連結 azureiotoperations/graph-dataflow-concatenate:1.0.0 2つ以上のパスを再び1つにまとめます。
ウィンドウ azureiotoperations/graph-dataflow-window:1.0.0 一定期間にわたってメッセージを収集し、集計します。
スロットル azureiotoperations/graph-dataflow-throttle:1.0.0 MQTTトピックパターンごとのメッセージレートを制限してください。

すべての変換は、演算子、関数、およびフィールド参照の 式言語 を共有します。 マップ、フィルター、ブランチ変換の状態ストアからの外部データを使用してメッセージを エンリッチ することもできます。

Tip

式は位置変数を使い、 $1 が最初の入力、 $2 が2番目の入力、という具合です。 ExpressionsリファレンスにはcToFなどの組み込み関数が一覧化されており、変換に利用可能なすべての演算子、関数、メタデータフィールドを網羅しています。

データフローグラフにおける変換の合成方法

変換は、 DataflowGraph リソース内で順番に接続します。 ソース > 変換 A > 変換 B > ... > 変換先

分岐変換によってフローは並列パスに分割され、連結変換によって再びマージされます。

任意の数の変換を任意の順序でチェーンできます。 1 つのマップ変換を持つパイプラインは、フィルター処理や分岐を行い、各パスを異なる方法でマッピングし、マージして時間窓で集計を行うパイプラインと同様に有効です。

データフローグラフの構成方法

データフローグラフ内の各変換は、コンテナレジストリから取得したあらかじめ構築されたアーティファクトを参照しています。 変換を構成するには、グラフ リソースの configuration セクションを通じて JSON としてルールを渡します。

Azure IoT Operationsをデプロイすると、自動的にmcr.microsoft.comを指すデフォルトのレジストリエンドポイントdefault作成されます。 組み込みの変換では、このエンドポイントを使用して Microsoft Container Registry から成果物をプルします。 追加のレジストリ設定は必要ありません。

データフローグラフリソースは、ソース、1つ以上の変換(それぞれ nodeType: Graph付き)、宛先の3種類の要素、そしてそれら間のデータの流れを説明する一連の nodeConnections を定義します。 各変換の configuration は、 rules キーの下にJSON文字列としてルールを渡します。

温度データを読み取り、摂氏を華氏にマップ変換で変換し、結果を公開する完全で実行可能な例(Operations、Azure CLI、Bicep、Kubernetes)については、データフローグラフの作成を参照してください。 以下のハウツー記事では、変換ルール自体に焦点を当てています。

ノード接続上でスキーマを設定する

データフローグラフはスキーマをデータフローとは異なる方法で扱います。 ソースまたは変換でスキーマを設定する代わりに、グラフ内のノード間の ノード接続 でスキーマを構成します。 分岐変換やフィルター変換は、ノード接続に付随するスキーマに対して実行時データを検証することも可能です。

nodeConnections配列の各エントリには、接続のfrom側にschemaを含めることができます。 このスキーマは、これら2つのノード間を流れるデータの期待されるフォーマットを記述しています:

nodeConnections: [
  {
    from: {
      name: 'source'
      schema: {
        schemaRef: 'aio-sr://my-namespace/sensor-data:1'
        serializationFormat: 'Json'
      }
    }
    to: {
      name: 'transform'
    }
  }
]

schemaRef値はフォーマットaio-sr://<namespace>/<name>:<version>を使用し、スキーマレジストリに保存されたスキーマを指しています。 データフローグラフはMQTT、Kafka、OpenTelemetryの各エンドポイントのみをサポートするため、対応されるシリアライズ形式は Jsonです。

以下の表は、データフローとデータフローグラフ間でスキーマ構成の違いをまとめたものです。

特徴 データ フロー データ フロー グラフ
スキーマの場所 ソース (sourceSettings.schemaRef) と変換 (builtInTransformationSettings.schemaRef) ノード接続時 (nodeConnections[].from.schema)
サポートされている変換先の形式 JSON、Parquet、Delta JSON
ランタイムの検証 ソーススキーマには対応していません ノード接続では分岐変換やフィルター変換を通じた任意の対応

Note

データフローグラフに関しては、REST APIリファレンスドキュメントに記載されている形式にもかかわらず、現在サポートされている宛先フォーマットはJSONのみです。

メッセージスキーマの定義、フォーマット、アップロード方法については「 メッセージスキーマの理解」を参照してください。

組み込みの変換と WASM 変換

データ フロー グラフでは、次の 2 種類の変換がサポートされています。

  • 組み込みの変換はMicrosoftによって既に構築されています(map、filter、branch、concatenate、window、throttle)。 ルールを使用して構成します。 コーディングは必要ありません。
  • WASM 変換 は、開発者がビルドしてデプロイするカスタム WebAssembly モジュールです。 組み込みの変換でカバーされないロジックが必要な場合に使用します。

両方の変換は同じ DataflowGraph リソース内で動作し、1つのパイプライン内で混ぜることができます。 カスタム変換の構築とデプロイの詳細については、「 データ フロー グラフでの WASM 変換の使用」を参照してください。

データフローグラフにおけるエラー処理

変換がメッセージ処理中にエラー(例:フィールドの欠落や無効な式)に遭遇すると、変換はメッセージを除外しエラーを記録します。 パイプラインは後続のメッセージの処理を続行します。

処理エラーの一般的な原因:

  • ルールの inputs で参照されているフィールドがメッセージに存在しません。
  • フィルター式または分岐式は、ブール以外の値を返します。
  • 式は互換性のないデータ型を参照します(例えば、算術におけるJSONオブジェクト)。
  • エンリッチメントに使用する状態ストアにアクセスできません。

エラーの処理を監視するには、データ フロー グラフのポッド ログを確認するか、メトリック エンドポイントを使用します。 詳細については、「 監視と監視の構成」を参照してください。

ステートフル グラフのスケーリング制限

Important

ウィンドウ変換とスロットル変換は ステートフルです。 各インスタンスは独自の状態を維持し、インスタンス同士がその状態を共有しません。 データフロープロファイルの インスタンス数 が1を超えると、 共有サブスクリプションは インスタンス間でメッセージを分散するため、各インスタンスはメッセージの一部しか見られません。 ウィンドウ 変換は 部分データセットに対して平均値、和値、カウントなどの集計を計算し、 スロットル 変換はパイプライン全体ではなく各インスタンスで独立して設定レート制限を強制します。

ウィンドウやスロットル変換を使用するデータフローグラフについては、データフロープロファイルのインスタンスカウントを 1 に設定します。 マップ、フィルタ、分岐、連結変換のみを使用する状態なしデータフローグラフは、より多くのインスタンス数を安全に活用してスループットを増加させることができます。

データフローグラフのパフォーマンスガイダンス

パイプライン内の各変換によって、処理オーバーヘッドが増加します。 次のガイドラインに留意してください。

  • より多くのルールを使用して、変換の数を減らします。 同じ構造で動作する変換ルールが多数ある場合は、ルールごとに個別の変換を作成するのではなく、1 つのマップ変換に配置します。
  • ロジックが異なる場合は、複数の変換を使用します。 異なる処理手順 (フィルター処理とマッピングと集計) が根本的に異なる場合は、個別の変換が理にかなっています。
  • 関連するルールを一緒に保持します。 1 つのマップ変換で、フィールドの名前変更、再構築、計算フィールド、メタデータ変換をすべて一度に処理できます。