graph-shortest-paths Operador (versão prévia)
Aplica-se a: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
O graph-shortest-paths
operador encontra os caminhos mais curtos entre um conjunto de nós de origem e um conjunto de nós de destino em um gráfico e retorna uma tabela com os resultados.
Observação
Esse operador é usado em conjunto com o operador make-graph.
Sintaxe
G |
graph-shortest-paths
[output
=
OutputOption] Predicado project
de padrão where
[ColumnName =
] Expressão [,
...]
Parâmetros
Nome | Digitar | Obrigatória | Descrição |
---|---|---|---|
G | string | ✔️ | A origem do gráfico, normalmente a saída de uma make-graph operação. |
Padrão | string | ✔️ | Um padrão de caminho que descreve o caminho a ser localizado. Os padrões devem incluir pelo menos uma aresta de comprimento variável e não podem conter várias sequências. |
Predicado | expressão | Uma expressão booleana que consiste em propriedades de variáveis nomeadas no padrão e constantes. | |
Expressão | expressão | ✔️ | Uma expressão escalar que define a linha de saída para cada caminho encontrado, usando constantes e referências a propriedades de variáveis nomeadas no padrão. |
Opção de saída | string | Especifica a saída da pesquisa como any (padrão) ou all . A saída é especificada como any para um único caminho mais curto por par de origem/destino e all para todos os caminhos mais curtos de comprimento mínimo igual. |
Notação de padrão de caminho
A tabela a seguir mostra as notações de padrão de caminho com suporte.
Element | Variável nomeada | Elemento anônimo |
---|---|---|
Nó | ( n) |
() |
Borda direcionada da esquerda para a direita | -[ e]-> |
--> |
Borda direcionada da direita para a esquerda | <-[ e]- |
<-- |
Qualquer borda de direção | -[ e]- |
-- |
Borda de comprimento variável | -[ e*3..5]- |
-[*3..5]- |
Borda de comprimento variável
Uma aresta de comprimento variável permite que um padrão específico se repita várias vezes dentro de limites definidos. Um asterisco (*
) denota esse tipo de aresta, seguido pelos valores mínimo e máximo de ocorrência no formato min..
max. Esses valores devem ser escalares inteiros. Qualquer sequência de arestas dentro desse intervalo pode corresponder à aresta variável do padrão, desde que todas as arestas na sequência atendam às restrições da where
cláusula.
Devoluções
O graph-shortest-paths
operador retorna um resultado tabular, em que cada registro corresponde a um caminho encontrado no gráfico. As colunas retornadas são definidas na cláusula do project
operador usando propriedades de nós e arestas definidas no padrão. As propriedades e funções das propriedades das arestas de comprimento variável são retornadas como uma matriz dinâmica. Cada valor na matriz corresponde a uma ocorrência da aresta de comprimento variável.
Exemplos
Esta seção fornece exemplos práticos que demonstram como usar o graph-shortest-paths
operador em diferentes cenários.
Encontre any
o caminho mais curto entre duas estações de trem
O exemplo a seguir demonstra como usar o graph-shortest-paths
operador para encontrar o caminho mais curto entre duas estações em uma rede de transporte. A consulta constrói um gráfico a partir dos dados e connections
encontra o "South-West"
caminho mais curto da estação para a "North"
estação, considerando caminhos de até cinco conexões. Como a saída padrão é any
, ele encontra qualquer caminho mais curto.
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
Saída
de | caminho | line | até |
---|---|---|---|
Sudoeste | [ "Sul", "Central", "Norte" ] |
[ "vermelho", "vermelho", "vermelho" ] |
Norte |
Encontrando todos os caminhos mais curtos entre duas estações de trem
O exemplo a seguir, como o exemplo anterior, localiza os caminhos mais curtos em uma rede de transporte. No entanto, ele usa output=all
, portanto, retorna todos os caminhos mais curtos.
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
Saída
de | caminho | line | até |
---|---|---|---|
Sudoeste | [ "Sul", "Central", "Norte" ] |
[ "vermelho", "vermelho", "vermelho" ] |
Norte |
Sudoeste | [ "Oeste", "Central", "Norte" ] |
[ "vermelho", "azul", "vermelho" ] |
Norte |