기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon Neptune의 openCypher 사양 규정 준수
openCypher의 Amazon Neptune 릴리스는 일반적으로 현재 openCypher 사양(Cypher 쿼리 언어 참조 버전 9
또한 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
– 현재 Neptune에서는 지원되지 않습니다. 하지만 Neptune은MANDATORY MATCH
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 값을 지원합니다.
– 현재 Neptune에서는 지원되지 않습니다.CALL[YIELD...]
UNION, UNION ALL
– 읽기 전용 쿼리는 지원되지만, 변형 쿼리는 현재 지원되지 않습니다.-
USING
–USING
는 엔진 버전 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은 datetime
을 epochmillis
로 변환하는 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에서 다중 값 속성을 발견하면 값 중 하나가 임의로 선택되어 비결정적 결과가 생성됩니다.