Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Die Amazon Neptune-Version von openCypher unterstützt im Allgemeinen die Klauseln, Operatoren, Ausdrücke, Funktionen und Syntax, die in Cypher Query Language Reference Version 9
Amazon Neptune unterstützt auch mehrere Funktionen, die über den Rahmen der OpenCypher-Spezifikation hinausgehen. Weitere Einzelheiten finden Sie unter OpenCypher-Erweiterungen in Amazon Neptune.
Anmerkung
Die aktuelle Neo4j-Implementierung von Cypher enthält Funktionen, die nicht in der oben genannten openCypher-Spezifikation enthalten sind. Wenn Sie aktuellen Cypher-Code zu Neptune migrieren, finden Sie unter Neptune-Kompatibilität mit Neo4j und Umschreiben von Cypher-Abfragen für die Ausführung auf Neptune openCypher weitere Informationen.
Unterstützung für openCypher-Klauseln in Neptune
Neptune unterstützt die folgenden Klauseln, wenn nicht anders angegeben:
MATCH
– Unterstützt, jedoch werden
undshortestPath()
zurzeit nicht unterstützt.allShortestPaths()
OPTIONAL MATCH
– Zurzeit nicht in Neptune unterstützt. Neptune unterstützt jedoch benutzerdefinierte ID-WerteMATCH in -Abfragen.MANDATORY MATCH
-
RETURN
– Unterstützt, jedoch nicht in Verbindung mit nichtstatischen Werten fürSKIP
oderLIMIT
. Beispielsweise funktioniert Folgendes zurzeit nicht:MATCH (n) RETURN n LIMIT toInteger(rand()) // Does NOT work!
-
WITH
– Unterstützt, jedoch nicht in Verbindung mit nichtstatischen Werten fürSKIP
oderLIMIT
. Beispielsweise funktioniert Folgendes zurzeit nicht: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
– Sie können mit Neptune benutzerdefinierte ID-Werte inCREATE
-Abfragen erstellen.DELETE
SET
REMOVE
MERGE
– Neptune unterstützt benutzerdefinierte ID-Werte inMERGE
-Abfragen.
– Zurzeit nicht in Neptune unterstützt.CALL[YIELD...]
UNION, UNION ALL
– Schreibgeschützte Abfragen werden unterstützt, Mutationsabfragen werden zurzeit jedoch nicht unterstützt.-
USING
—USING
wird ab Engine-Version 1.3.2.0 unterstützt. Weitere Informationen finden Sie unter Abfragehinweise.
Unterstützung für openCypher-Operatoren in Neptune
Neptune unterstützt die folgenden Operatoren, wenn nicht anders angegeben:
Allgemeine Operatoren
DISTINCT
.
Operator für den Zugriff auf Eigenschaften einer verschachtelten Literalmap.
Mathematische Operatoren
+
Additionsoperator.-
Subtraktionsoperator.*
Multiplikationsoperator./
Teilungsoperator.%
Modulo-Teilungsoperator.Der
^
Potenzierungsoperator.is NOT supported
Vergleichsoperatoren
=
Additionsoperator.<>
Ungleichheitsoperator.Der
<
Kleiner-Als-Operator wird unterstützt, es sei denn, eines der Argumente ist Path, List oder Map.Der
>
Größer-Als-Operator wird unterstützt, es sei denn, eines der Argumente ist Path, List oder Map.Der Operator
<=
less-than-or-equal -to wird unterstützt, außer wenn eines der Argumente ein Path, List oder Map ist.Der Operator
>=
greater-than-or-equal -to wird unterstützt, außer wenn eines der Argumente ein Path, List oder Map ist.IS NULL
IS NOT NULL
STARTS WITH
wird unterstützt, wenn es sich bei den gesuchten Daten um eine Zeichenfolge handelt.ENDS WITH
wird unterstützt, wenn es sich bei den gesuchten Daten um eine Zeichenfolge handelt.CONTAINS
wird unterstützt, wenn es sich bei den gesuchten Daten um eine Zeichenfolge handelt.
Boolesche Operatoren
AND
OR
XOR
NOT
Zeichenfolgenoperatoren
+
Verkettungsoperator.
Listenoperatoren.
+
Verkettungsoperator.IN
(überprüft auf Vorhandensein eines Elements in der Liste)
Unterstützung für openCypher-Ausdrücke in Neptune
Neptune unterstützt die folgenden Ausdrücke, wenn nicht anders angegeben:
CASE
-
Der
[]
-Ausdruck wird zurzeit in Neptune nicht für den Zugriff auf dynamisch berechnete Eigenschaftsschlüssel innerhalb eines Knotens, einer Beziehung oder einer Map unterstützt. Beispielsweise funktioniert Folgendes nicht:MATCH (n) WITH [5, n, {key: 'value'}] AS list RETURN list[1].name
Unterstützung für openCypher-Funktionen in Neptune
Neptune unterstützt die folgenden Funktionen, wenn nicht anders angegeben:
Prädikatsfunktionen
exists()
Skalarfunktionen
coalesce()
endNode()
epochmillis()
head()
id()
last()
length()
randomUUID()
properties()
removeKeyFromMap
size()
– Diese Methodenüberladung funktioniert zurzeit nur für Musterausdrücke, Listen und Zeichenfolgen.startNode()
timestamp()
toBoolean()
toFloat()
toInteger()
type()
Aggregationsfunktionen
avg()
collect()
count()
max()
min()
percentileDisc()
stDev()
percentileCont()
stDevP()
sum()
Listenfunktionen
join() (verkettet Zeichenfolgen in einer Liste zu einer einzigen Zeichenfolge)
keys()
labels()
nodes()
range()
relationships()
reverse()
tail()
Mathematische Funktionen – numerisch
abs()
ceil()
floor()
rand()
round()
sign()
Mathematische Funktionen – logarithmisch
e()
exp()
log()
log10()
sqrt()
Mathematische Funktionen – trigonometrisch
acos()
asin()
atan()
atan2()
cos()
cot()
degrees()
pi()
radians()
sin()
tan()
Zeichenfolgenfunktionen
join() (verkettet Zeichenfolgen in einer Liste zu einer einzigen Zeichenfolge)
left()
lTrim()
replace()
reverse()
right()
rTrim()
split()
substring()
toLower()
toString()
toUpper()
trim()
Benutzerdefinierte Funktionen
User-defined functions
werden derzeit in Neptune nicht unterstützt.
Neptune-spezifische openCypher-Implementierungsdetails
Die folgenden Abschnitte beschreiben, wie sich die Neptune-Implementierung von openCypher von der openCypher-Spezifikation
Evaluierungen von Pfaden variabler Länge (VLP) in Neptune
Evaluierungen von Pfaden (VLP
) variabler Länge entdecken Pfade zwischen Knoten im Diagramm. Die Pfadlänge in einer Abfrage kann uneingeschränkt sein. Um Zyklen zu verhindern, legt die openCypher-Spezifikation
Denn VLPs die Neptune-Implementierung weicht von der OpenCypher-Spezifikation insofern ab, als sie nur konstante Werte für Eigenschaftsgleichheitsfilter unterstützt. Führen Sie die folgende Abfrage aus:
MATCH (x)-[:route*1..2 {dist:33, code:x.name}]->(y) return x,y
Da der Wert des x.name
-Eigenschaftsgleichheitsfilters keine Konstante ist, führt diese Abfrage zu einer UnsupportedOperationException
mit der folgenden Meldung: Property predicate over variable-length relationships with non-constant
expression is not supported in this release.
Temporale Unterstützung in der Neptune OpenCypher-Implementierung (Neptune-Datenbank 1.3.1.0 und niedriger)
Neptune stellt zurzeit eine eingeschränkte Unterstützung für temporale Funktionen in openCypher bereit. Die Lösung unterstützt den Datentyp DateTime
für temporale Typen.
Die Funktion datetime()
kann verwendet werden, um die aktuellen Werte für UTC-Datum und -Uhrzeit wie folgt abzurufen:
RETURN datetime() as res
Datums- und Uhrzeitwerte können aus Zeichenfolgen im Format "
dateT
time"
analysiert werden, wobei date und time in einem der folgenden unterstützten Formate ausgedrückt werden:
Unterstützte Datumsformate
yyyy-MM-dd
yyyyMMdd
yyyy-MM
yyyy-DDD
yyyyDDD
yyyy
Unterstützte Uhrzeitformate
HH:mm:ssZ
HHmmssZ
HH:mm:ssZ
HH:mmZ
HHmmZ
HHZ
HHmmss
HH:mm:ss
HH:mm
HHmm
HH
Zum Beispiel:
RETURN datetime('2022-01-01T00:01') // or another example: RETURN datetime('2022T0001')
Beachten Sie, dass alle Datums-/Uhrzeitwerte in Neptune openCypher als UTC-Werte gespeichert und abgerufen werden.
Neptune openCypher verwendet eine statement
-Uhr. Das bedeutet, dass über die Dauer einer Abfrage derselbe Zeitpunkt verwendet wird. Eine andere Abfrage innerhalb derselben Transaktion verwendet möglicherweise einen anderen Zeitpunkt.
Neptune unterstützt keine Verwendung von Funktionen innerhalb von Aufrufen von datetime()
. Beispielsweise funktioniert Folgendes nicht:
CREATE (:n {date:datetime(tostring(2021))}) // ---> NOT ALLOWED!
Neptune unterstützt die Funktion epochmillis()
, die einen datetime
-Wert in epochmillis
konvertiert. Zum Beispiel:
MATCH (n) RETURN epochMillis(n.someDateTime) 1698972364782
Neptune unterstützt zurzeit keine anderen Funktionen und Operationen für DateTime
-Objekte, z. B. Addition und Subtraktion.
Temporale Unterstützung in der Neptune OpenCypher-Implementierung (Neptune Analytics und Neptune Database 1.3.2.0 und höher)
Die folgende Datetime-Funktionalität für OpenCypher gilt für Neptune Analytics. Alternativ können Sie den Labmode-Parameter DatetimeMillisecond=enabled
verwenden, um die folgenden Datetime-Funktionen auf Neptune Engine-Release-Version 1.3.2.0 und höher zu aktivieren. Weitere Informationen zur Verwendung dieser Funktionalität im Labmode finden Sie unter. Erweiterte Datetime-Unterstützung
-
Support für Millisekunden. Das Datetime-Literal wird immer mit Millisekunden zurückgegeben, auch wenn Millisekunden 0 ist. (Bisheriges Verhalten bestand darin, Millisekunden zu kürzen.)
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" } } } ] }
-
Support für den Aufruf der Funktion datetime () über gespeicherte Eigenschaften oder Zwischenergebnisse. Beispielsweise waren die folgenden Abfragen vor dieser Funktion nicht möglich.
Datetime () über Eigenschaften:
// 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 () im Vergleich zu Zwischenergebnissen:
// Parse datetime from parameter UNWIND $list as myDate RETURN datetime(myDate) as d
-
Es ist jetzt auch möglich, Datetime-Eigenschaften zu speichern, die in den oben genannten Fällen erstellt wurden.
Speichern von Datetime aus der String-Eigenschaft einer Eigenschaft in eine andere:
// 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-Erstellung von Knoten aus einem Parameter mit einer Datetime-Eigenschaft:
// 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"} ] }
-
Support für eine größere Teilmenge von ISO86 01 Datetime-Formaten. Weitere Informationen finden Sie unter weiter unten in diesem Dokument.
Unterstützte Formate
Das Format eines Datetime-Werts ist [Date] T [Time] [Timezone], wobei T das Trennzeichen ist. Wenn keine explizite Zeitzone angegeben wird, wird UTC (Z) als Standard angenommen.
Zeitzone
Folgende Zeitzonenformate werden unterstützt:
-
+/-hh:mm
-
+/-HHmm
-
+/-HH
Das Vorhandensein einer Zeitzone in einer Datetime-Zeichenfolge ist optional. Falls der Zeitzonen-Offset 0 ist, kann Z anstelle des obigen Zeitzonen-Postfixes verwendet werden, um die UTC-Zeit anzugeben. Der unterstützte Bereich einer Zeitzone liegt zwischen -14:00 und + 14:00 Uhr.
Datum
Wenn keine Zeitzone vorhanden ist oder die Zeitzone UTC (Z) ist, lauten die unterstützten Datumsformate wie folgt:
Anmerkung
DDD bezieht sich auf ein Ordinaldatum, das für einen Tag des Jahres von 001 bis 365 steht (366 in Schaltjahren). 2024-002 steht beispielsweise für den 2. Januar 2024.
yyyy-MM-dd
yyyyMMdd
yyyy-MM
yyyyMM
yyyy-DDD
yyyyDDD
yyyy
Wenn eine andere Zeitzone als Z ausgewählt wird, sind die unterstützten Datumsformate auf die folgenden beschränkt:
yyyy-MM-dd
yyyy-DDD
yyyyDDD
Der unterstützte Datumsbereich reicht von 1400-01-01 bis 9999-12-31.
Zeit
Wenn keine Zeitzone vorhanden ist oder die Zeitzone UTC (Z) ist, werden folgende Zeitformate unterstützt:
HH:mm:ss.SSS
HH:mm:ss
HHmmss.SSS
HHmmss
HH:mm
HHmm
HH
Wenn eine andere Zeitzone als Z ausgewählt wird, sind die unterstützten Zeitformate auf die folgenden beschränkt:
HH:mm:ss
HH:mm:ss.SSS
Unterschiede bei der Semantik der Neptune-openCypher-Sprache
Neptune repräsentiert Knoten und Beziehung IDs als Zeichenketten und nicht als Ganzzahlen. Die ID entspricht der ID, die über den Datenloader bereitgestellt wird. Wenn es einen Namespace für die Spalte gibt, entspricht sie dem Namespace und der ID. Daher gibt die Funktion id
eine Zeichenfolge statt einer Ganzzahl zurück.
Der Datentyp INTEGER
ist auf 64 Bit begrenzt. Wenn Sie mittels der Funktion TOINTEGER
größere Fließkomma- oder Zeichenfolgenwerte in eine Ganzzahl konvertieren, werden negative Werte zu LLONG_MIN
und positive Werte zu LLONG_MAX
verkürzt.
Zum Beispiel:
RETURN TOINTEGER(2^100) > 9223372036854775807 RETURN TOINTEGER(-1 * 2^100) > -9223372036854775808
Mehrwertige Eigenschaften
Obwohl OpenCypher CREATE keine mehrwertigen Eigenschaften erstellt, können sie in Daten vorkommen, die mit Gremlin (Neptune Database) erstellt wurden, oder beim Laden von Daten (Neptune Database und Neptune Analytics). Wenn Neptune openCypher eine Eigenschaft mit mehreren Werten findet, wird ein Wert zufällig ausgewählt, was zu einem nicht deterministischen Ergebnis führt.