Compartir a través de


Operador graph-shortest-paths (versión preliminar)

Se aplica a: ✅Microsoft FabricAzure Data Explorer✅Azure MonitorMicrosoft 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