Freigeben über


Graph-shortest-paths-Operator (Vorschau)

Gilt für: ✅Microsoft Fabric

Der graph-shortest-paths Operator findet die kürzesten Pfade zwischen einer Reihe von Quellknoten und einer Gruppe von Zielknoten in einem Diagramm und gibt eine Tabelle mit den Ergebnissen zurück.

Hinweis

Dieser Operator wird mit dem Make-Graph-Operator verwendet.

Syntax

G|graph-shortest-paths [output= OutputOption] Musterprädikat whereproject[ColumnName=] Ausdruck [, ...]

Parameter

Name Typ Erforderlich Beschreibung
G Zeichenfolge ✔️ Die Diagrammquelle, in der Regel die Ausgabe eines make-graph Vorgangs.
Muster Zeichenfolge ✔️ Ein Pfadmuster , das den zu findenden Pfad beschreibt. Muster müssen mindestens einen Rand mit variabler Länge enthalten und dürfen nicht mehrere Sequenzen enthalten.
Prädikat Ausdruck Ein boolescher Ausdruck, der aus Eigenschaften benannter Variablen im Muster und konstanten besteht.
Ausdruck Ausdruck ✔️ Ein skalarer Ausdruck, der die Ausgabezeile für jeden gefundenen Pfad definiert, wobei Konstanten und Verweise auf Eigenschaften benannter Variablen im Muster verwendet werden.
OutputOption Zeichenfolge Gibt die Suchausgabe als any (Standard) oder all. Die Ausgabe wird für any einen einzelnen kürzesten Pfad pro Quell-/Zielpaar und all für alle kürzesten Pfade gleicher Mindestlänge angegeben.

Pfadmusternotation

Die folgende Tabelle zeigt die unterstützten Pfadmusternotationen.

Element Benannte Variable Anonymous-Element
Knoten ( n) ()
Gerichtete Kante von links nach rechts -[ e]-> -->
Gerichtete Kante von rechts nach links <-[ e]- <--
Beliebige Richtungskante -[ e]- --
Variabler Längenrand -[ e*3..5]- -[*3..5]-

Variabler Längenrand

Ein Rand mit variabler Länge ermöglicht es einem bestimmten Muster, mehrere Male innerhalb definierter Grenzwerte zu wiederholen. Ein Sternchen (*) gibt diesen Edgetyp an, gefolgt von den Minimal- und Maximalwertwerten im Format "min"... Diese Werte müssen ganzzahlige Skalare sein. Jede Abfolge von Kanten innerhalb dieses Bereichs kann mit dem variablen Rand des Musters übereinstimmen, vorausgesetzt, alle Kanten in der Sequenz entsprechen den where Klauseleinschränkungen.

Gibt zurück

Der graph-shortest-paths Operator gibt ein tabellarisches Ergebnis zurück, wobei jeder Datensatz einem Pfad entspricht, der im Diagramm gefunden wird. Die zurückgegebenen Spalten werden in der Operatorklausel project mithilfe von Eigenschaften von Knoten und Kanten definiert, die im Muster definiert sind. Eigenschaften und Funktionen von Eigenschaften variabler Längenränder werden als dynamisches Array zurückgegeben. Jeder Wert im Array entspricht einem Vorkommen des Rands der variablen Länge.

Beispiele

Im folgenden Beispiel wird veranschaulicht, wie der Betreiber den graph-shortest-paths kürzesten Weg zwischen zwei Stationen in einem Verkehrsnetz finden kann. Die Abfrage erstellt ein Diagramm aus den Daten in connections und findet den kürzesten Pfad von der "South-West""North" Station, wobei Pfade bis zu fünf Verbindungen lang berücksichtigt werden. Da die Standardausgabe lautet any, wird jeder kürzeste Pfad gefunden.

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 = map(connections, to_station), line = map(connections, line), to = destination.station

Ausgabe

Von Pfad Linie Bis
Sud-Ouest [
"Süd",
"Zentral",
"Nord"
]
[
"rot",
"rot",
"rot"
]
Nord

Im folgenden Beispiel, wie im vorherigen Beispiel, werden die kürzesten Wege in einem Transportnetz gefunden. Es wird jedoch verwendet output=all, sodass alle kürzesten Pfade zurückgegeben werden.

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 = map(connections, to_station), line = map(connections, line), to = destination.station

Ausgabe

Von Pfad Linie Bis
Sud-Ouest [
"Süd",
"Zentral",
"Nord"
]
[
"rot",
"rot",
"rot"
]
Nord
Sud-Ouest [
"West",
"Zentral",
"Nord"
]
[
"rot",
"blau",
"rot"
]
Nord