Amazon Neptune의 openCypher 사양 규정 준수 - Amazon Neptune

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon Neptune의 openCypher 사양 규정 준수

openCypher의 Amazon Neptune 릴리스는 일반적으로 현재 openCypher 사양(Cypher 쿼리 언어 참조 버전 9)에 정의된 절, 연산자, 표현식, 함수 및 구문을 지원합니다. openCypher에 대한 Neptune 지원의 한계와 차이점은 다음과 같습니다.

또한 Amazon Neptune은 openCypher 사양 범위를 벗어난 여러 기능을 지원합니다. 자세한 내용은 Amazon Neptune의 openCypher 확장 섹션을 참조하세요.

참고

Cypher의 현재 구현된 Neo4j에는 위에서 언급한 openCypher 사양에서 지원하지 않는 기능이 포함되어 있습니다. 현재 Cypher 코드를 Neptune으로 마이그레이션하는 경우 자세한 내용은 Neo4j에 대한 Neptune의 호환성Neptune에서 in openCypher 를 실행하기 위해 Cypher 쿼리 다시 작성을 참조하세요.

Neptune의 openCypher 절 지원

Neptune은 별다른 언급이 없으면 다음 절을 지원합니다.

  • MATCH   –   지원되며, shortestPath()allShortestPaths()는 현재 지원되지 않습니다.

  • OPTIONAL MATCH

  • MANDATORY MATCH   –   현재 Neptune에서는 지원되지 않습니다. 하지만 Neptune은 MATCH 쿼리에서 사용자 지정 ID 값을 지원합니다.

  • RETURN   –   지원되지만, SKIP 또는 LIMIT에 대해 정적이 아닌 값과 함께 사용하는 경우는 예외입니다. 예를 들어, 다음은 현재 작동하지 않습니다.

    MATCH (n) RETURN n LIMIT toInteger(rand()) // Does NOT work!
  • WITH   –   지원되지만, SKIP 또는 LIMIT에 대해 정적이 아닌 값과 함께 사용하는 경우는 예외입니다. 예를 들어, 다음은 현재 작동하지 않습니다.

    MATCH (n) WITH n SKIP toInteger(rand()) WITH count() AS count RETURN count > 0 AS nonEmpty // Does NOT work!
  • UNWIND

  • WHERE

  • ORDER BY

  • SKIP

  • LIMIT

  • CREATE   –   Neptune을 사용하면 CREATE 쿼리에 사용자 지정 ID 값을 만들 수 있습니다.

  • DELETE

  • SET

  • REMOVE

  • MERGE   –   Neptune은 MERGE 쿼리에서 사용자 지정 ID 값을 지원합니다.

  • CALL[YIELD...]   –   현재 Neptune에서는 지원되지 않습니다.

  • UNION, UNION ALL   –   읽기 전용 쿼리는 지원되지만, 변형 쿼리는 현재 지원되지 않습니다.

  • USINGUSING는 엔진 버전 1.3.2.0에서 지원됩니다. 자세한 내용은 쿼리 힌트를 참조하세요.

Neptune의 openCypher 연산자 지원

Neptune은 별다른 언급이 없으면 다음 연산자를 지원합니다.

일반 연산자
  • DISTINCT

  • 중첩된 리터럴 맵의 속성에 액세스하는 . 연산자.

수학적 연산자
  • + 더하기 연산자.

  • - 빼기 연산자.

  • * 곱셈 연산자.

  • / 나눗셈 연산자.

  • % 모듈로 나눗셈 연산자.

  • ^ 거듭제곱 연산자는 지원되지 않습니다.

비교 연산자
  • = 더하기 연산자.

  • <> 부등식 연산자.

  • 인수 중 하나가 경로, 목록 또는 맵인 경우를 제외하고 <보다 작음 연산자가 지원됩니다.

  • 인수 중 하나가 경로, 목록 또는 맵인 경우를 제외하고 >보다 큼 연산자가 지원됩니다.

  • 인수 중 하나가 경로, 목록 또는 맵인 경우를 제외하고 <=보다 작거나 같음 연산자가 지원됩니다.

  • 인수 중 하나가 경로, 목록 또는 맵인 경우를 제외하고 >=보다 크거나 같음 연산자가 지원됩니다.

  • IS NULL

  • IS NOT NULL

  • STARTS WITH는 검색 중인 데이터가 문자열인 경우 지원됩니다.

  • ENDS WITH는 검색 중인 데이터가 문자열인 경우 지원됩니다.

  • CONTAINS는 검색 중인 데이터가 문자열인 경우 지원됩니다.

부울 연산
  • AND

  • OR

  • XOR

  • NOT

문자열 연산자
  • + 연결 연산자.

목록 연산자
  • + 연결 연산자.

  • IN(목록에 항목이 있는지 확인)

Neptune의 openCypher 표현식 지원

Neptune은 별다른 언급이 없으면 다음 표현식을 지원합니다.

  • CASE

  • [] 표현식은 현재 Neptune에서 노드, 관계 또는 맵 내에서 동적으로 계산된 속성 키에 액세스하는 데 지원되지 않습니다. 예를 들어, 다음은 작동하지 않습니다.

    MATCH (n) WITH [5, n, {key: 'value'}] AS list RETURN list[1].name

Neptune의 openCypher 함수 지원

Neptune은 별다른 언급이 없으면 다음 함수를 지원합니다.

조건자 함수
  • exists()

스칼라 함수
  • coalesce()

  • endNode()

  • epochmillis()

  • head()

  • id()

  • last()

  • length()

  • randomUUID()

  • properties()

  • removeKeyFromMap

  • size()   –   이 오버로드된 메서드는 현재 패턴 표현식, 목록 및 문자열에만 사용할 수 있습니다.

  • startNode()

  • timestamp()

  • toBoolean()

  • toFloat()

  • toInteger()

  • type()

집계 함수
  • avg()

  • collect()

  • count()

  • max()

  • min()

  • percentileDisc()

  • stDev()

  • percentileCont()

  • stDevP()

  • sum()

함수 나열
  • join()(목록의 문자열을 단일 문자열로 연결)

  • keys()

  • labels()

  • nodes()

  • range()

  • relationships()

  • reverse()

  • tail()

수학 함수 - 숫자
  • abs()

  • ceil()

  • floor()

  • rand()

  • round()

  • sign()

수학 함수 - 대수
  • e()

  • exp()

  • log()

  • log10()

  • sqrt()

수학 함수 - 삼각
  • acos()

  • asin()

  • atan()

  • atan2()

  • cos()

  • cot()

  • degrees()

  • pi()

  • radians()

  • sin()

  • tan()

문자열 함수
  • join()(목록의 문자열을 단일 문자열로 연결)

  • left()

  • lTrim()

  • replace()

  • reverse()

  • right()

  • rTrim()

  • split()

  • substring()

  • toLower()

  • toString()

  • toUpper()

  • trim()

사용자 정의 함수

사용자 정의 함수는 현재 Neptune에서 지원되지 않습니다.

Neptune 전용 openCypher 구현 세부 정보

다음 섹션에서는 openCypher의 Neptune 구현이 openCypher 사양과 다르거나 그 범위를 넘어설 수 있는 방법을 설명합니다.

Neptune의 가변 길이 경로(VLP) 평가

가변 길이 경로(VLP) 평가를 통해 그래프에서 노드 간 경로를 찾아냅니다. 쿼리에서 경로 길이를 제한하지 않을 수 있습니다. 주기 순환을 방지하기 위해 openCypher 사양에서는 솔루션당 각 엣지를 최대 한 번 순회하도록 지정합니다.

VLP의 경우 Neptune 구현은 속성 등식 필터에 대해 상수 값만 지원한다는 점에서 openCypher 사양에서 벗어납니다. 다음 쿼리를 실행합니다.

MATCH (x)-[:route*1..2 {dist:33, code:x.name}]->(y) return x,y

x.name 속성 등식 필터 값은 상수가 아니므로, 이 쿼리를 실행하면 Property predicate over variable-length relationships with non-constant expression is not supported in this release. 메시지와 함께 UnsupportedOperationException 결과가 발생합니다.

Neptune openCypher 구현의 임시 지원(Neptune 데이터베이스 1.3.1.0 이하)

Neptune은 현재 openCypher의 임시 함수를 제한적으로 지원합니다. 임시 유형의 DateTime 데이터 유형을 지원합니다.

datetime() 함수는 다음과 같이 현재 UTC 날짜 및 시간을 가져오는 데 사용할 수 있습니다.

RETURN datetime() as res

날짜와 시간 값은 날짜시간이 모두 아래 지원되는 형식 중 하나로 표현되는 "날짜T시간" 형식의 문자열에서 구문 분석할 수 있습니다.

지원되는 날짜 형식
  • yyyy-MM-dd

  • yyyyMMdd

  • yyyy-MM

  • yyyy-DDD

  • yyyyDDD

  • yyyy

지원되는 시간 형식
  • HH:mm:ssZ

  • HHmmssZ

  • HH:mm:ssZ

  • HH:mmZ

  • HHmmZ

  • HHZ

  • HHmmss

  • HH:mm:ss

  • HH:mm

  • HHmm

  • HH

예시:

RETURN datetime('2022-01-01T00:01') // or another example: RETURN datetime('2022T0001')

참고로 Neptune openCypher의 모든 날짜/시간 값은 UTC 값으로 저장되고 검색됩니다.

Neptune openCypher는 statement 시계를 사용합니다. 즉, 쿼리 기간 내내 동일한 인스턴트 시간이 사용됩니다. 동일한 트랜잭션 내의 다른 쿼리는 다른 인스턴트 시간을 사용할 수 있습니다.

Neptune은 datetime()에 대한 호출 내에서 함수를 사용하는 것을 지원하지 않습니다. 예를 들어, 다음은 작동하지 않습니다.

CREATE (:n {date:datetime(tostring(2021))}) // ---> NOT ALLOWED!

Neptune은 datetimeepochmillis로 변환하는 epochmillis() 함수를 지원합니다. 예시:

MATCH (n) RETURN epochMillis(n.someDateTime) 1698972364782

Neptune은 현재 DateTime 객체에 대한 다른 함수 및 연산자(예: 더하기 및 빼기)를 지원하지 않습니다.

Neptune openCypher 구현의 임시 지원(Neptune Analytics 및 Neptune Database 1.3.2.0 이상)

OpenCypher에 대한 다음 날짜/시간 기능은 Neptune Analytics에 적용됩니다. 또는 랩모드 파라미터를 사용하여 Neptune 엔진 릴리스 버전 1.3.2.0 이상에서 다음 날짜/시간 기능을 DatetimeMillisecond=enabled 활성화할 수 있습니다. 랩모드에서이 기능을 사용하는 방법에 대한 자세한 내용은 섹션을 참조하세요확장된 날짜/시간 지원.

  • 밀리초 지원. 날짜/시간 리터럴은 밀리초가 0인 경우에도 항상 밀리초 단위로 반환됩니다. (이전 동작은 밀리초를 자르는 것입니다.)

    CREATE (:event {time: datetime('2024-04-01T23:59:59Z')}) # Returning the date returns with 000 suffixed representing milliseconds MATCH(n:event) RETURN n.time as datetime { "results" : [ { "n" : { "~id" : "0fe88f7f-a9d9-470a-bbf2-fd6dd5bf1a7d", "~entityType" : "node", "~labels" : [ "event" ], "~properties" : { "time" : "2024-04-01T23:59:59.000Z" } } } ] }
  • 저장된 속성 또는 중간 결과를 통해 datetime() 함수를 호출할 수 있도록 지원합니다. 예를 들어이 기능 이전에는 다음 쿼리가 가능하지 않았습니다.

    속성을 통한 날짜/시간():

    // Create node with property 'time' stored as string CREATE (:event {time: '2024-04-01T23:59:59Z'}) // Match and return this property as datetime MATCH(n:event) RETURN datetime(n.time) as datetime

    중간 결과를 통한 Datetime():

    // Parse datetime from parameter UNWIND $list as myDate RETURN datetime(myDate) as d
  • 이제 위에서 언급한 경우에서 생성된 날짜/시간 속성을 저장할 수도 있습니다.

    한 속성의 문자열 속성에서 다른 속성으로 날짜/시간 저장:

    // Create node with property 'time' stored as string CREATE (:event {time: '2024-04-01T23:59:59Z', name: 'crash'}) // Match and update the same property to datetime type MATCH(n:event {name: 'crash'}) SET n.time = datetime(n.time) // Match and update another node's property MATCH(e:event {name: 'crash'}) MATCH(n:server {name: e.servername}) SET n.time = datetime(e.time)

    날짜/시간 속성을 사용하여 파라미터에서 노드를 일괄 생성합니다.

    // Batch create from parameter UNWIND $list as events CREATE (n:crash) {time: datetime(events.time)} // Parameter value { "x":[ {"time":"2024-01-01T23:59:29", "name":"crash1"}, {"time":"2023-01-01T00:00:00Z", "name":"crash2"} ] }
  • ISO8601 날짜/시간 형식의 더 큰 하위 집합을 지원합니다. 자세한 내용은 아래 단원을 참조하십시오.

지원되는 형식

날짜/시간 값의 형식은 [Date]T[Time][Timezone]이며, 여기서 T는 구분자입니다. 명시적 시간대가 제공되지 않으면 UTC(Z)가 기본값으로 간주됩니다.

시간대

지원되는 시간대 형식은 다음과 같습니다.

  • +/-HH:mm

  • +/-HHmm

  • +/-HH

날짜/시간 문자열에 시간대가 있는 것은 선택 사항입니다. 시간대 오프셋이 0인 경우 위의 시간대 접두사 대신 Z를 사용하여 UTC 시간을 표시할 수 있습니다. 지원되는 시간대 범위는 -14:00~+14:00입니다.

날짜

시간대가 없거나 시간대가 UTC(Z)인 경우 지원되는 날짜 형식은 다음과 같습니다.

참고

DDD는 001부터 365(윤년은 366)까지의 요일을 나타내는 서수 날짜를 나타냅니다. 예를 들어 2024년 2월 2일은 2024년 1월 2일입니다.

  • yyyy-MM-dd

  • yyyyMMdd

  • yyyy-MM

  • yyyyMM

  • yyyy-DDD

  • yyyyDDD

  • yyyy

Z 이외의 시간대를 선택하면 지원되는 날짜 형식이 다음으로 제한됩니다.

  • yyyy-MM-dd

  • yyyy-DDD

  • yyyyDDD

지원되는 날짜 범위는 1400-01-01~9999-12-31입니다.

Time

Timezaone이 없거나 시간대가 UTC(Z)인 경우 지원되는 시간 형식은 다음과 같습니다.

  • HH:mm:ss.SSS

  • HH:mm:ss

  • HHmmss.SSS

  • HHmmss

  • HH:mm

  • HHmm

  • HH

Z 이외의 시간대를 선택하면 지원되는 시간 형식이 다음으로 제한됩니다.

  • HH:mm:ss

  • HH:mm:ss.SSS

Neptune openCypher 언어 시맨틱의 차이점

Neptune은 노드 및 관계 ID를 정수가 아닌 문자열로 나타냅니다. ID는 데이터 로더를 통해 제공된 ID와 같습니다. 열에 네임스페이스가 있는 경우 네임스페이스에 ID를 더한 값입니다. 따라서 id 함수는 정수 대신 문자열을 반환합니다.

INTEGER 데이터 유형은 64비트로 제한됩니다. TOINTEGER 함수를 사용하여 더 큰 부동 소수점 또는 문자열 값을 정수로 변환할 때 음수 값은 LLONG_MIN으로 잘리고 양수 값은 LLONG_MAX로 잘립니다.

예시:

RETURN TOINTEGER(2^100) > 9223372036854775807 RETURN TOINTEGER(-1 * 2^100) > -9223372036854775808

다중 값 속성

openCypher CREATE는 다중 값 속성을 생성하지 않지만 Gremlin(Neptune 데이터베이스)을 사용하여 생성된 데이터에 존재하거나 데이터를 로드할 때(Neptune 데이터베이스 및 Neptune 분석) 존재할 수 있습니다. Neptune openCypher에서 다중 값 속성을 발견하면 값 중 하나가 임의로 선택되어 비결정적 결과가 생성됩니다.