Sdílet prostřednictvím


Graph-shortest-paths – operátor (Preview)

Platí pro: ✅Microsoft FabricAzure Data Explorer✅Azure MonitorMicrosoft Sentinel

Operátor graph-shortest-paths najde nejkratší cesty mezi sadou zdrojových uzlů a sadou cílových uzlů v grafu a vrátí tabulku s výsledky.

Poznámka:

Tento operátor se používá ve spojení s operátorem make-graph.

Syntaxe

G graph-shortest-paths | [output = OutputOption] Predikát project vzoru where [ColumnName =] Expression [, ...]

Parametry

Název Type Požadováno Popis
G string ✔️ Zdroj grafu, obvykle výstup operace make-graph .
Vzor string ✔️ Vzor cesty, který popisuje cestu, kterou chcete najít. Vzory musí obsahovat aspoň jednu hranu s proměnlivou délkou a nesmí obsahovat více sekvencí.
Predikát výraz Logický výraz, který se skládá z vlastností pojmenovaných proměnných ve vzoru a konstantách.
Expression výraz ✔️ Skalární výraz, který definuje výstupní řádek pro každou nalezenou cestu, pomocí konstant a odkazů na vlastnosti pojmenovaných proměnných ve vzoru.
OutputOption string Určuje výstup hledání jako any (výchozí) nebo all. Výstup je určen jako any jedna nejkratší cesta na dvojici zdroje/cíle a all pro všechny nejkratší cesty se stejnou minimální délkou.

Zápis vzoru cesty

V následující tabulce jsou uvedeny podporované zápisy vzorů cest.

Element (Prvek) Pojmenovaná proměnná Anonymní element
Uzel (n) ()
Směrovaný okraj zleva doprava -[e]-> -->
Směrovaný okraj zprava doleva <-[e]- <--
Libovolná hrana směru -[e]- --
Hrana s proměnlivou délkou -[e*3..5]- -[*3..5]-

Hrana s proměnlivou délkou

Hrana proměnlivé délky umožňuje, aby se určitý vzor v definovaných limitech opakoval vícekrát. Hvězdička (*) označuje tento typ hrany a za ním minimální a maximální hodnoty výskytu ve formátu min... Tyto hodnoty musí být celočíselné skaláry. Jakákoli posloupnost okrajů v tomto rozsahu se může shodovat s proměnlivým okrajem vzoru, pokud všechny hrany v sekvenci splňují where omezení klauzule.

Návraty

Operátor graph-shortest-paths vrátí tabulkový výsledek, kde každý záznam odpovídá cestě nalezené v grafu. Vrácené sloupce jsou definovány v klauzuli operátora project pomocí vlastností uzlů a hran definovaných v vzoru. Vlastnosti a funkce vlastností hrany s proměnlivou délkou se vrátí jako dynamické pole. Každá hodnota v poli odpovídá výskytu hrany délky proměnné.

Příklady

Tato část obsahuje praktické příklady ukazující, jak operátor používat graph-shortest-paths v různých scénářích.

Vyhledání any nejkratší cesty mezi dvěma vlakovými stanicemi

Následující příklad ukazuje, jak pomocí graph-shortest-paths operátoru najít nejkratší cestu mezi dvěma stanicemi v přepravní síti. Dotaz vytvoří graf z dat v connections datech a najde nejkratší cestu od "South-West" "North" stanice vzhledem k délce až pěti připojení. Vzhledem k tomu, že výchozí výstup je any, najde jakoukoli nejkratší cestu.

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

Výstup

from path čára na
Jihozápadní [
"Jih",
"Centrální",
"Sever"
]
[
"červená",
"červená",
"červená"
]
Sever

Vyhledání všech nejkratších cest mezi dvěma vlakovými stanicemi

Následující příklad, podobně jako v předchozím příkladu, najde nejkratší cesty v přepravní síti. Používá output=allse však , takže vrátí všechny nejkratší cesty.

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

Výstup

from path čára na
Jihozápadní [
"Jih",
"Centrální",
"Sever"
]
[
"červená",
"červená",
"červená"
]
Sever
Jihozápadní [
"West",
"Centrální",
"Sever"
]
[
"červená",
"modrá",
"červená"
]
Sever