다음을 통해 공유


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

적용 대상: ✅Microsoft Fabric

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

참고 항목

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

구문

G|graph-shortest-paths [output=OutputOption] 패턴where [project] = [ ...]

매개 변수

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

경로 패턴 표기법

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

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

가변 길이 가장자리

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

반품

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

예제

다음 예제에서는 연산자를 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 = map(connections, to_station), line = map(connections, line), to = destination.station

출력

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

다음 예제는 이전 예제와 마찬가지로 운송 네트워크에서 가장 짧은 경로를 찾습니다. 그러나 이 메서드는 가장 짧은 경로를 모두 반환하므로 사용합니다 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 = map(connections, to_station), line = map(connections, line), to = destination.station

출력

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