次の方法で共有


graph-shortest-paths 演算子 (プレビュー)

適用対象: ✅Microsoft FabricAzure データ エクスプローラーAzure MonitorMicrosoft 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