graph-shortest-paths 演算子 (プレビュー)
適用対象: ✅Microsoft Fabric✅Azure データ エクスプローラー✅Azure Monitor✅Microsoft Sentinel
graph-shortest-paths
演算子は、一連のソース ノードと一連のターゲット ノードの間の最短パスをグラフで検索し、結果を含むテーブルを返します。
Note
この演算子は、 make-graph 演算子と組み合わせて使用されます。
構文
G |
graph-shortest-paths
[output
=
OutputOption] Pattern where
Predicate project
[ColumnName =
] Expression [,
...]
パラメーター
件名 | タイプ | Required | 説明 |
---|---|---|---|
G | string | ✔️ | グラフ ソース。通常は、 make-graph 操作からの出力です。 |
パターン | string | ✔️ | 検索するパスを記述する パス パターン 。 パターンには、少なくとも 1 つの可変長エッジを含める必要があり、複数のシーケンスを含めることはできません。 |
Predicate | 式 (expression) | パターンと定数の名前付き変数のプロパティで構成されるブール式。 | |
Expression | 式 (expression) | ✔️ | パターン内の名前付き変数のプロパティへの定数と参照を使用して、見つかった各パスの出力行を定義するスカラー式。 |
OutputOption | string | 検索出力を any (既定) または all として指定します。 出力は、ソースとターゲットのペアごとに 1 つの最短パスに対して any として指定され、同じ最小長のすべての最短パスに対して all されます。 |
パス パターン表記
次の表に、サポートされているパス パターン表記を示します。
要素 | 名前付き変数 | Anonymous 要素 |
---|---|---|
ノード | ( n) |
() |
左から右への向きエッジ | -[ e]-> |
--> |
右から左への向きエッジ | <-[ e]- |
<-- |
任意の方向エッジ | -[ e]- |
-- |
可変長エッジ | -[ e*3..5]- |
-[*3..5]- |
可変長エッジ
可変長エッジを使用すると、定義された制限内で特定のパターンを複数回繰り返すことができます。 アスタリスク (*
) は、この種類のエッジを表し、その後に最小値と最大出現回数の値 min..
maxを示します。 これらの値は整数スカラーである必要があります。 シーケンス内のすべてのエッジが where
句の制約を満たしている場合、この範囲内のエッジのシーケンスはパターンの可変エッジと一致する可能性があります。
返品
graph-shortest-paths
演算子は表形式の結果を返します。各レコードはグラフ内のパスに対応します。 返される列は、パターンで定義されたノードとエッジのプロパティを使用して、演算子の project
句で定義されます。 可変長エッジのプロパティと関数は、動的配列として返されます。 配列内の各値は、可変長エッジの出現に対応します。
例
このセクションでは、さまざまなシナリオで graph-shortest-paths
演算子を使用する方法を示す実用的な例を示します。
2 つの駅間 any
最短パスを見つける
次の例では、 graph-shortest-paths
オペレーターを使用して、輸送ネットワーク内の 2 つのステーション間の最短パスを検索する方法を示します。 このクエリでは、 connections
のデータからグラフを作成し、 "South-West"
から "North"
ステーションまでの最短パスを検索します。最大 5 つの接続のパスを考慮します。 既定の出力は any
であるため、最短パスを検索します。
let connections = datatable(from_station:string, to_station:string, line:string)
[
"Central", "North", "red",
"North", "Central", "red",
"Central", "South", "red",
"South", "Central", "red",
"South", "South-West", "red",
"South-West", "South", "red",
"South-West", "West", "red",
"West", "South-West", "red",
"Central", "East", "blue",
"East", "Central", "blue",
"Central", "West", "blue",
"West", "Central", "blue",
];
connections
| make-graph from_station --> to_station with_node_id=station
| graph-shortest-paths (start)-[connections*1..5]->(destination)
where start.station == "South-West" and destination.station == "North"
project from = start.station, path = connections.to_station, line = connections.line, to = destination.station
出力
from | path | line | to |
---|---|---|---|
South-West | [ "South", "Central", "North" ] |
[ "red", "red", "red" ] |
North |
2 つの駅間のすべての最短パスを検索する
次の例は、前の例と同様に、輸送ネットワーク内の最短パスを検索します。 ただし、 output=all
を使用するため、すべての最短パスが返されます。
let connections = datatable(from_station:string, to_station:string, line:string)
[
"Central", "North", "red",
"North", "Central", "red",
"Central", "South", "red",
"South", "Central", "red",
"South", "South-West", "red",
"South-West", "South", "red",
"South-West", "West", "red",
"West", "South-West", "red",
"Central", "East", "blue",
"East", "Central", "blue",
"Central", "West", "blue",
"West", "Central", "blue",
];
connections
| make-graph from_station --> to_station with_node_id=station
| graph-shortest-paths output=all (start)-[connections*1..5]->(destination)
where start.station == "South-West" and destination.station == "North"
project from = start.station, path = connections.to_station, line = connections.line, to = destination.station
出力
from | path | line | to |
---|---|---|---|
South-West | [ "South", "Central", "North" ] |
[ "red", "red", "red" ] |
North |
South-West | [ "West", "Central", "North" ] |
[ "red", "blue", "red" ] |
North |