스키마 요구사항
Spanner Graph 알고리즘은 다음 요구사항을 충족하는 스키마가 있는 그래프에서 실행할 수 있습니다.
- 에지 입력 테이블은 소스 노드 입력 테이블에 인터리브 처리되어야 하며 대상 노드 입력 테이블에 대한 외래 키 또는 정보 외래 키가 있어야 합니다. Spanner Graph 스키마 설계 권장사항을 참고하세요.
- 그래프 알고리즘의 각 입력 테이블에는 고유한 식별 라벨이 있어야 합니다.
다음은 지원되지 않는 스키마의 예입니다.
-- Unsupported: Both `Person` and `Account` can only be referred to via label `Entity`.
CREATE PROPERTY GRAPH FinGraph
NODE TABLES (
Person KEY (id)
LABEL Entity PROPERTIES (...),
Account KEY (id)
LABEL Entity PROPERTIES (...)
);
다음은 지원되는 스키마의 예시입니다.
-- Supported: Even though label `Entity` refers to both `Person` and `Account`,
-- label `Customer` uniquely identifies `Person`, label `Account` uniquely identifies `Account`.
CREATE PROPERTY GRAPH FinGraph
NODE TABLES (
Person KEY (id)
LABEL Customer PROPERTIES (...)
LABEL Entity PROPERTIES (...),
Account KEY (id)
LABEL Account PROPERTIES (...)
LABEL Entity PROPERTIES (...)
);
기능 호환성
이 섹션에서는 일반 그래프 기능과의 알고리즘 쿼리 호환성을 간략하게 설명합니다.
지원되는 MATCH 절
알고리즘 쿼리 구조에서 MATCH 절을 사용하여 알고리즘의 입력 그래프를 정의할 때는 다음 사항을 고려해야 합니다.
- 각
MATCH에는 이름이 지정된 변수가 하나인 요소 패턴 (노드 또는 에지)이 하나만 포함되어야 합니다. - 에지 패턴에 종료 노드의 명시적 패턴이 포함된 경우 노드 패턴에서 노드 라벨이나 변수를 사용하지 마세요.
- 다른 곳에 정의된 변수를 참조하지 않는 경우 요소 패턴 내에서
WHERE절을 사용할 수 있습니다. MATCH절의 라벨 표현식은 하나의 요소 테이블을 고유하게 식별해야 합니다.
다음 예에서는 지원되는 MATCH 절을 보여줍니다.
-- Supported: Assuming only 1 element table has `Account` label:
MATCH (a:Account)
MATCH (a:Account WHERE a.id > 400)
MATCH (a:Account WHERE a.id IN [101, 102, 105])
MATCH -[e:Transfers WHERE e.amount < 500]->
다음 예에서는 지원되지 않는 MATCH 절을 보여줍니다.
-- Unsupported: End nodes for edge patterns cannot have labels or named variables.
MATCH (a:Account)-[]->
-- Unsupported: Each MATCH can only name one variable.
MATCH (a:Account)-[e:Transfers]->
-- Unsupported: If there are multiple node element tables in the graph, each MATCH
-- must uniquely identify one element table.
MATCH (a)
-- Unsupported: The `Entity` label maps to both `Account` and `Person` node element tables.
MATCH (a:Account | Entity)
RETURN 절 사용
알고리즘 쿼리 구조의 RETURN 절은 알고리즘 쿼리에서 반환되는 데이터를 정의합니다. 다음과 같은 제약 조건에 따라 RETURN 절에서 알고리즘의 출력 서명의 열을 참조할 수 있습니다.
- 알고리즘이 노드를 출력하는 경우 노드의 속성을 반환할 수 있습니다. 노드의 ELEMENT_DEFINITION_NAME을 반환할 수도 있습니다.
- 알고리즘이 경로를 출력하는 경우
PATH_LENGTH(path).를 반환할 수 있습니다. - 알고리즘에서 스칼라 출력을 반환할 수 있습니다.
- 리터럴 상수를 반환할 수 있습니다.
다음 예에서는 지원되는 RETURN 절을 보여줍니다.
-- Supported.
CALL PageRank(...) YIELD node, score
RETURN ELEMENT_DEFINITION_NAME(node) AS node_type, node.id, score
-- Supported: You can return constants.
CALL PageRank(...) YIELD node, score
RETURN node.id, score, "pagerank-run1" AS algo_run_id
-- Supported.
CALL ShortestPath(...) YIELD source_node, target_node, path, cost
RETURN source_node.id AS source_id, target_node.id AS target_id,
PATH_LENGTH(path) AS length, cost
다음 예에서는 지원되지 않는 RETURN 절을 보여줍니다.
-- Unsupported: You cannot return the graph element `node` directly.
RETURN node, score
-- Unsupported: You can only return properties of `node`. Applying a function to a node property
-- is not supported.
RETURN node.id + 1, score
-- Unsupported: You can only return the scalar `score` directly from the algorithm output. Applying
-- a function to scalar output is not supported.
RETURN node.id, score + 1
-- Unsupported: General function calls are not allowed.
RETURN JSON_OBJECT(node.id, score) as json_obj
매개변수가 지원되지 않음
알고리즘 쿼리는 쿼리 매개변수를 지원하지 않습니다.
뷰에서 생성된 그래프 지원
보기에서 그래프를 만들 때 알고리즘 입력을 정의하는 데 사용되는 노드와 가장자리 (가장자리의 끝 노드 포함)가 보기를 기반으로 하지 않는 경우에만 알고리즘 쿼리가 지원됩니다.