다음을 통해 공유


그래프 최단 경로 연산자(미리 보기)

적용 대상: ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft Sentinel

연산자는 graph-shortest-paths 그래프에서 원본 노드 집합과 대상 노드 집합 간의 최단 경로를 찾고 결과가 포함된 테이블을 반환합니다.

참고 항목

이 연산자는 make-graph 연산와 함께 사용됩니다.

구문

G | graph-shortest-paths [output = OutputOption] 패턴 where 조건자 project [ColumnName =] Expression [, ...]

매개 변수

이름 Type 필수 설명
G string ✔️ 그래프 원본( 일반적으로 작업의 출력)입니다 make-graph .
패턴 string ✔️ 찾을 경로를 설명하는 경로 패턴입니다. 패턴은 하나 이상의 가변 길이 가장자리를 포함해야 하며 여러 시퀀스를 포함할 수 없습니다.
술어 패턴 및 상수에서 명명된 변수의 속성으로 구성된 부울 식입니다.
✔️ 패턴에서 명명된 변수의 속성에 대한 상수 및 참조를 사용하여 찾은 각 경로의 출력 행을 정의하는 스칼라 식입니다.
OutputOption string 검색 출력을 (기본값) 또는 all.로 any 지정합니다. 출력은 원본/대상 쌍당 가장 짧은 단일 경로 및 all 최소 길이가 같은 가장 짧은 모든 경로에 대해 지정 any 됩니다.

경로 패턴 표기법

다음 표에서는 지원되는 경로 패턴 표기법을 보여 줍니다.

요소 명명된 변수 Anonymous 요소
노드 (n) ()
왼쪽에서 오른쪽으로 가장자리 이동 -[e]-> -->
오른쪽에서 왼쪽으로 방향이 지정된 가장자리 <-[e]- <--
모든 방향 가장자리 -[e]- --
가변 길이 가장자리 -[e*3..5]- -[*3..5]-

가변 길이 가장자리

가변 길이 에지를 사용하면 특정 패턴이 정의된 제한 내에서 여러 번 반복할 수 있습니다. 별표(*)는 이 유형의 에지를 표시하고, 그 뒤에 최소값과 최대 항목 값..이 최소값으로 표시됩니다. 이러한 값은 정수 스칼라여야 합니다. 시퀀스의 모든 가장자리가 절 제약 조건을 충족하는 경우 이 범위 내의 모든 가장자리 시퀀스는 패턴의 가변 에지와 일치할 where 수 있습니다.

반품

연산자는 graph-shortest-paths 각 레코드가 그래프에 있는 경로에 해당하는 테이블 형식 결과를 반환합니다. 반환된 열은 패턴에 정의된 노드 및 에지의 속성을 사용하여 연산 project 자의 절에 정의됩니다. 가변 길이 에지 속성의 속성 및 함수는 동적 배열로 반환됩니다. 배열의 각 값은 가변 길이 가장자리의 발생에 해당합니다.

예제

이 섹션에서는 다양한 시나리오에서 연산자를 사용하는 graph-shortest-paths 방법을 보여 주는 실용적인 예제를 제공합니다.

두 기차역 사이의 가장 짧은 경로 찾기 any

다음 예제에서는 연산자를 graph-shortest-paths 사용하여 운송 네트워크의 두 스테이션 간에 가장 짧은 경로를 찾는 방법을 보여 줍니다. 쿼리는 데이터 connections 에서 그래프를 생성하고 최대 5개의 연결 길이를 고려하여 스테이션에서 "South-West" "North" 가장 짧은 경로를 찾습니다. 기본 출력은 any가장 짧은 경로를 찾습니다.

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

출력

보낸 사람 경로 line
남서부 [
"South",
"Central",
"북부"
]
[
"red",
"red",
"red"
]
North

두 기차역 사이의 가장 짧은 경로 모두 찾기

다음 예제는 이전 예제와 마찬가지로 운송 네트워크에서 가장 짧은 경로를 찾습니다. 그러나 이 메서드는 가장 짧은 경로를 모두 반환하므로 사용합니다 output=all.

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

출력

보낸 사람 경로 line
남서부 [
"South",
"Central",
"북부"
]
[
"red",
"red",
"red"
]
North
남서부 [
"West",
"Central",
"북부"
]
[
"red",
"blue",
"red"
]
North