Operador graph-shortest-paths (versión preliminar)
Se aplica a: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
El graph-shortest-paths
operador busca las rutas de acceso más cortas entre un conjunto de nodos de origen y un conjunto de nodos de destino en un gráfico y devuelve una tabla con los resultados.
Nota:
Este operador se usa junto con el operador make-graph.
Sintaxis
G graph-shortest-paths
|
[output
=
OutputOption] Predicado project
de patrón where
[ColumnName =
] Expresión [,
...]
Parámetros
Nombre | Type | Obligatorio | Descripción |
---|---|---|---|
G | string | ✔️ | Origen del grafo, normalmente la salida de una make-graph operación. |
Patrón | string | ✔️ | Patrón de ruta de acceso que describe la ruta de acceso que se va a buscar. Los patrones deben incluir al menos un borde de longitud variable y no pueden contener varias secuencias. |
Predicado | expression | Expresión booleana que consta de propiedades de variables con nombre en el patrón y las constantes. | |
Expression | expression | ✔️ | Expresión escalar que define la fila de salida para cada ruta de acceso encontrada, utilizando constantes y referencias a propiedades de variables con nombre en el patrón. |
OutputOption | string | Especifica la salida de búsqueda como any (valor predeterminado) o all . La salida se especifica como any para una única ruta de acceso más corta por par de origen/destino y all para todas las rutas de acceso más cortas de igual longitud mínima. |
Notación de patrón de ruta de acceso
En la tabla siguiente se muestran las notaciones de patrón de ruta de acceso admitidas.
Elemento | Variable con nombre | Elemento Anónimo |
---|---|---|
Nodo | ( n) |
() |
Borde dirigido de izquierda a derecha | -[ e]-> |
--> |
Borde dirigido de derecha a izquierda | <-[ e]- |
<-- |
Cualquier borde de dirección | -[ e]- |
-- |
Borde de longitud variable | -[ e*3..5]- |
-[*3..5]- |
Borde de longitud variable
Un borde de longitud variable permite que un patrón específico se repita varias veces dentro de los límites definidos. Un asterisco (*
) denota este tipo de borde, seguido de los valores de repetición mínimo y máximo en formato mínimo..
. Estos valores deben ser escalares enteros. Cualquier secuencia de bordes dentro de este intervalo puede coincidir con el borde variable del patrón, siempre que todos los bordes de la secuencia cumplan las restricciones de la where
cláusula.
Devoluciones
El graph-shortest-paths
operador devuelve un resultado tabular, donde cada registro corresponde a una ruta de acceso que se encuentra en el gráfico. Las columnas devueltas se definen en la cláusula del project
operador mediante propiedades de nodos y bordes definidos en el patrón. Las propiedades y funciones de las propiedades de bordes de longitud variable se devuelven como una matriz dinámica. Cada valor de la matriz corresponde a una aparición del borde de longitud variable.
Ejemplos
En esta sección se proporcionan ejemplos prácticos que muestran cómo usar el graph-shortest-paths
operador en diferentes escenarios.
Encontrar any
camino más corto entre dos estaciones de tren
En el ejemplo siguiente se muestra cómo usar el graph-shortest-paths
operador para buscar la ruta más corta entre dos estaciones en una red de transporte. La consulta construye un grafo a partir de los datos de connections
y encuentra la ruta más corta de "South-West"
a la "North"
estación, considerando las rutas de acceso de hasta cinco conexiones largas. Dado que la salida predeterminada es any
, encuentra cualquier ruta de acceso más corta.
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
Salida
from | path | line | to |
---|---|---|---|
Suroeste | [ "Sur", "Central", "Norte" ] |
[ "rojo", "rojo", "rojo" ] |
North |
Búsqueda de todas las rutas más cortas entre dos estaciones de tren
En el ejemplo siguiente, como en el ejemplo anterior, se buscan las rutas más cortas de una red de transporte. Sin embargo, usa output=all
, por lo que devuelve todas las rutas de acceso más cortas.
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
Salida
from | path | line | to |
---|---|---|---|
Suroeste | [ "Sur", "Central", "Norte" ] |
[ "rojo", "rojo", "rojo" ] |
North |
Suroeste | [ "Oeste", "Central", "Norte" ] |
[ "rojo", "azul", "rojo" ] |
North |