Graph-shortest-paths – operátor (Preview)
Platí pro: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft 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.
Syntaxe
G graph-shortest-paths
|
[output
=
OutputOption] Predikát project
vzoru where
[ColumnName =
] Expression [,
...]
Parametry
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=all
se 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 |