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.
OpenCypher-Erweiterungen in Amazon Neptune
Amazon Neptune unterstützt die Referenzversion 9 der OpenCypher-Spezifikation. Einzelheiten finden Sie Einhaltung der OpenCypher-Spezifikationen in Amazon Neptune in Amazon Neptune. Darüber hinaus unterstützt Amazon Neptune die hier aufgeführten Funktionen. Sofern keine spezifischen Versionen erwähnt werden, sind die Funktionen in Neptune Database und Neptune Analytics verfügbar.
Die Neptune-spezifische Funktion join()
Verfügbar in Neptune Database und Neptune Analytics.
Neptune implementiert die Funktion join()
, die in der openCypher-Spezifikation nicht enthalten ist. Sie erstellt aus einer Liste von Zeichenfolgen-Literalen und einem Zeichenfolgen-Trennzeichen ein Zeichenfolgen-Literal. Sie verwendet zwei Argumente:
Das erste Argument ist eine Liste von Zeichenfolgenliteralen.
Das zweite Argument ist die Trennzeichenfolge, die aus null, einem oder mehreren Zeichen bestehen kann.
Beispiel:
join(["abc", "def", "ghi"], ", ") // Returns "abc, def, ghi"
Die Neptune-spezifische Funktion removeKeyFromMap()
Verfügbar in Neptune Database und Neptune Analytics.
Neptune implementiert die Funktion removeKeyFromMap()
, die in der openCypher-Spezifikation nicht enthalten ist. Sie entfernt einen angegebenen Schlüssel aus einer Map und gibt die resultierende neue Map zurück.
Die Funktion verwendet zwei Argumente:
Das erste Argument ist die Map, aus der der Schlüssel entfernt werden soll.
Das zweite Argument ist der Schlüssel, der aus der Map entfernt werden soll.
Die Funktion removeKeyFromMap()
ist besonders nützlich in Situationen, in denen Sie Werte für einen Knoten oder eine Beziehung festlegen möchten, indem Sie eine Liste von Maps entladen. Zum Beispiel:
UNWIND [{`~id`: 'id1', name: 'john'}, {`~id`: 'id2', name: 'jim'}] as val CREATE (n {`~id`: val.`~id`}) SET n = removeKeyFromMap(val, '~id')
Benutzerdefinierte ID-Werte für Knoten- und Beziehungseigenschaften
Verfügbar in Neptune Database 1.2.0.2 und höher und Neptune Analytics.
Ab Engine-Version 1.2.0.2 hat Neptune die openCypher-Spezifikation erweitert, sodass Sie jetzt die id
-Werte für Knoten und Beziehungen in den Klauseln CREATE
, MERGE
und MATCH
angeben können. Auf diese Weise können Sie benutzerfreundliche Zeichenketten anstelle von UUIDs systemgenerierten Zeichenketten zuweisen, um Knoten und Beziehungen zu identifizieren.
In Neptune Analytics sind benutzerdefinierte ID-Werte für Kanten nicht verfügbar.
Warnung
Diese Erweiterung der openCypher-Spezifikation ist abwärtsinkompatibel, da ~id
jetzt als reservierter Eigenschaftsname gilt. Wenn Sie in Ihren Daten und Abfragen ~id
bereits als Eigenschaft verwenden, müssen Sie die vorhandene Eigenschaft zu einem neuen Eigenschaftsschlüssel migrieren und den alten entfernen. Siehe Was Sie tun sollten, wenn Sie ~id zurzeit als Eigenschaft verwenden.
Dies ist ein Beispiel für die Erstellung von Knoten und Beziehungen mit benutzerdefinierten IDS:
CREATE (n {`~id`: 'fromNode', name: 'john'}) -[:knows {`~id`: 'john-knows->jim', since: 2020}] ->(m {`~id`: 'toNode', name: 'jim'})
Wenn Sie versuchen, eine benutzerdefinierte ID zu erstellen, die bereits verwendet wird, gibt Neptune den Fehler DuplicateDataException
aus.
Dies ist ein Beispiel für die Verwendung einer benutzerdefinierten ID in einer MATCH
-Klausel:
MATCH (n {`~id`: 'id1'}) RETURN n
Hier ist ein Beispiel für die Verwendung von Benutzerdefiniert IDs in einer MERGE
Klausel:
MATCH (n {name: 'john'}), (m {name: 'jim'}) MERGE (n)-[r {`~id`: 'john->jim'}]->(m) RETURN r
Was Sie tun sollten, wenn Sie ~id
zurzeit als Eigenschaft verwenden
An Engine-Version 1.2.0.2 wird der ~id
-Schlüssel in openCypher-Klauseln nicht mehr als Eigenschaft, sondern als id
behandelt. Das bedeutet, dass der Zugriff auf eine Eigenschaft nicht mehr möglich ist, wenn Sie diese mit ~id
benannt haben.
Wenn Sie die Eigenschaft ~id
verwenden, müssen Sie vor dem Upgrade auf Engine-Version 1.2.0.2
oder höher zunächst die vorhandene Eigenschaft ~id
zu einem neuen Eigenschaftsschlüssel migrieren und dann die Eigenschaft ~id
entfernen. Betrachten Sie die folgende Abfrage:
Sie erstellt eine neue Eigenschaft mit dem Namen 'newId' für alle Knoten.
Sie kopiert den Wert der Eigenschaft '~id' in die Eigenschaft 'newID'.
Sie entfernt die Eigenschaft '~id' aus den Daten.
MATCH (n) WHERE exists(n.`~id`) SET n.newId = n.`~id` REMOVE n.`~id`
Dies muss für alle Beziehungen in den Daten ausgeführt werden, die die Eigenschaft ~id
besitzen.
Sie müssen auch alle Abfragen ändern, die auf die Eigenschaft ~id
verweisen. Beispielsweise würde diese Abfrage:
MATCH (n) WHERE n.`~id` = 'some-value' RETURN n
... wie folgt geändert werden:
MATCH (n) WHERE n.newId = 'some-value' RETURN n
Unterstützung für CALL-Unterabfragen in Neptune
Verfügbar in Neptune Database 1.4.1.0 und höher und Neptune Analytics.
Amazon Neptune unterstützt CALL
Unterabfragen. Eine CALL
Unterabfrage ist ein Teil der Hauptabfrage, der in einem isolierten Bereich für jede Eingabe der Unterabfrage ausgeführt wird. CALL
Nehmen wir beispielsweise an, ein Diagramm enthält Daten über Personen, ihre Freunde und Städte, in denen sie gelebt haben. Mithilfe einer CALL
Unterabfrage können wir die beiden größten Städte abrufen, in denen jeder Freund von jemandem gelebt hat:
MATCH (person:Person)-[:knows]->(friend) CALL { WITH friend MATCH (friend)-[:lived_in]->(city) RETURN city ORDER BY city.population DESC LIMIT 2 } RETURN person, friend, city
In diesem Beispiel wird der CALL { ... }
darin enthaltene Abfrageteil für jede Abfrage ausgeführt, auf friend
die die vorherige MATCH-Klausel zutrifft. Wenn die innere Abfrage ausgeführt wird, beziehen sich die ORDER
LIMIT
UND-Klauseln auf die Städte, in denen ein bestimmter Freund gelebt hat. Wir erhalten also (höchstens) zwei Städte pro Freund.
Alle Abfrageklauseln sind in Unterabfragen verfügbar. CALL
Dies schließt auch verschachtelte CALL
Unterabfragen ein. Es gibt einige Einschränkungen für die erste WITH
Klausel und die ausgegebenen Variablen, die im Folgenden erklärt werden.
Gültigkeitsbereich der Variablen innerhalb der CALL-Unterabfrage
Die Variablen aus den Klauseln vor der Unterabfrage, die in der CALL
Unterabfrage verwendet werden, müssen von der ersten Klausel importiert werden. WITH
Im Gegensatz zu regulären WITH
Klauseln kann sie nur eine Liste von Variablen enthalten, erlaubt aber kein Aliasing und kann nicht zusammen mitDISTINCT
,,ORDER BY
, WHERE
oder verwendet werden. SKIP
LIMIT
Von der CALL-Unterabfrage zurückgegebene Variablen
Die Variablen, die von der CALL
Unterabfrage ausgegeben werden, werden mit der letzten RETURN
Klausel angegeben. Beachten Sie, dass sich die ausgegebenen Variablen nicht mit Variablen vor der CALL
Unterabfrage überschneiden dürfen.
Einschränkungen
Derzeit werden Aktualisierungen innerhalb einer CALL
Unterabfrage nicht unterstützt.
Neptune OpenCypher-Funktionen
Verfügbar in Neptune Database 1.4.1.0 und höher und Neptune Analytics.
textIndexOf
textIndexOf(text :: STRING, lookup :: STRING, from = 0 :: INTEGER?, to = -1 :: INTEGER?) :: (INTEGER?)
Gibt den Index des ersten Vorkommens von lookup
im Bereich von text
Offset from
(einschließlich) bis Offset (ausschließlich) zurück. to
Wenn -1 to
ist, wird der Bereich bis zum Ende von fortgesetzttext
. Die Indizierung basiert auf Null und wird in Unicode-Skalarwerten (keine Surrogatcodepunkte) ausgedrückt.
RETURN textIndexOf('Amazon Neptune', 'e') { "results": [{ "textIndexOf('Amazon Neptune', 'e')": 8 }] }
collToSet
collToSet(values :: LIST OF ANY?) :: (LIST? OF ANY?)
Gibt eine neue Liste zurück, die nur die eindeutigen Elemente aus der ursprünglichen Liste enthält. Die Reihenfolge der ursprünglichen Liste wird beibehalten (z. B. [1, 6, 5, 1, 5]
Rückgabe[1, 6, 5]
).
RETURN collToSet([1, 6, 5, 1, 1, 5]) { "results": [{ "collToSet([1, 6, 5, 1, 1, 5])": [1, 6, 5] }] }
collSubtract
collSubtract(first :: LIST OF ANY?, second :: LIST OF ANY?) :: (LIST? OF ANY?)
Gibt eine neue Liste zurück, die alle eindeutigen Elemente für das first
Ausschließen von Elementen enthält. second
RETURN collSubtract([2, 5, 1, 0], [1, 5]) { "results": [{ "collSubtract([2, 5, 1, 0], [1, 5])": [0, 2] }] }
collIntersection
collIntersection(first :: LIST? OF ANY?, second :: LIST? OF ANY?) :: (LIST? OF ANY?)
Gibt eine neue Liste zurück, die alle eindeutigen Elemente des Schnittpunkts von first
und second
enthält.
RETURN collIntersection([2, 5, 1, 0], [1, 5]) { "results": [{ "collIntersection([2, 5, 1, 0], [1, 5])": [1, 5] }] }
Funktionen zum Sortieren
In den folgenden Abschnitten werden Funktionen zum Sortieren von Sammlungen definiert. Diese Funktionen verwenden (in einigen Fällen optionale) config
Zuordnungsargumente oder eine Liste mehrerer solcher Zuordnungen, die den Sortierschlüssel und/oder die Sortierrichtung definieren:
{ key: STRING, order: STRING }
Hier key
ist entweder eine Map- oder eine Node-Eigenschaft, deren Wert für die Sortierung verwendet werden soll. order
ist entweder "" oder asc
"desc
" (Groß- und Kleinschreibung wird nicht beachtet), um eine aufsteigende bzw. absteigende Sortierung anzugeben. Standardmäßig erfolgt die Sortierung in aufsteigender Reihenfolge.
collSort
collSort(coll :: LIST OF ANY, config :: MAP?) :: (LIST? OF ANY?)
Gibt eine neue sortierte Liste zurück, die die Elemente aus der coll
Eingabeliste enthält.
RETURN collSort([5, 3, 1], {order: 'asc'}) { "results": [{ "collSort([5, 3, 1])": [1, 3, 5] }] }
collSortMaps
collSortMaps(coll :: LIST OF MAP, config :: MAP) :: (LIST? OF ANY?)
Gibt eine Liste von Maps zurück, sortiert nach dem Wert der angegebenen key
Eigenschaft.
RETURN collSortMaps([{name: 'Alice', age: 25}, {name: 'Bob', age: 35}, {name: 'Charlie', age: 18}], {key: 'age', order: 'desc'}) { "results": [{ "x": [{ "age": 35, "name": "Bob" }, { "age": 25, "name": "Alice" }, { "age": 18, "name": "Charlie" }] }] }
collSortMulti
collSortMulti(coll :: LIST OF MAP?, configs = [] :: LIST OF MAP, limit = -1 :: INTEGER?, skip = 0 :: INTEGER?) :: (LIST? OF ANY?)
Gibt eine Liste von Maps zurück, sortiert nach dem Wert der angegebenen key
Eigenschaften, wobei optional Limit und Skip angewendet wird.
RETURN collSortMulti([{name: 'Alice', age: 25}, {name: 'Bob', age: 35}, {name: 'Charlie', age: 18}], [{key: 'age', order: 'desc'}, {key:'name'}]) as x { "results": [{ "x": [{ "age": 35, "name": "Bob" }, { "age": 25, "name": "Alice" }, { "age": 18, "name": "Charlie" }] }] }
collSortNodes
collSortNodes(coll :: LIST OF NODE, config :: MAP) :: (LIST? OF NODE?)
Gibt eine sortierte Version der coll
Eingabeliste zurück, wobei die Knotenelemente nach den Werten ihrer jeweiligen key
Eigenschaften sortiert werden.
create (n:person {name: 'Alice', age: 23}), (m:person {name: 'Eve', age: 21}), (o:person {name:'Bob', age:25}) {"results":[]} match (n:person) with collect(n) as people return collSortNodes(people, {key: 'name', order: 'desc'}) { "results": [{ "collSortNodes(people, 'name')": [{ "~id": "e599240a-8c23-4337-8aa8-f603c8fb5488", "~entityType": "node", "~labels": ["person"], "~properties": { "age": 21, "name": "Eve" } }, { "~id": "8a6ef785-59e3-4a0b-a0ff-389655a9c4e6", "~entityType": "node", "~labels": ["person"], "~properties": { "age": 25, "name": "Bob" } }, { "~id": "466bc826-f47f-452c-8a27-6b7bdf7ae9b4", "~entityType": "node", "~labels": ["person"], "~properties": { "age": 23, "name": "Alice" } }] }] } match (n:person) with collect(n) as people return collSortNodes(people, {key: 'age'}) { "results": [{ "collSortNodes(people, '^age')": [{ "~id": "e599240a-8c23-4337-8aa8-f603c8fb5488", "~entityType": "node", "~labels": ["person"], "~properties": { "age": 21, "name": "Eve" } }, { "~id": "466bc826-f47f-452c-8a27-6b7bdf7ae9b4", "~entityType": "node", "~labels": ["person"], "~properties": { "age": 23, "name": "Alice" } }, { "~id": "8a6ef785-59e3-4a0b-a0ff-389655a9c4e6", "~entityType": "node", "~labels": ["person"], "~properties": { "age": 25, "name": "Bob" } }] }] }