openCypher ekstensi di Amazon Neptunus - Amazon Neptune

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

openCypher ekstensi di Amazon Neptunus

Amazon Neptunus mendukung referensi spesifikasi versi openCypher 9. Silakan lihat openCypher kepatuhan spesifikasi di Amazon Neptunus di Amazon Neptunus untuk detailnya. Selain itu, Amazon Neptunus mendukung fitur yang tercantum di sini. Kecuali versi tertentu disebutkan, fitur-fiturnya tersedia di Database Neptunus dan Neptunus Analytics.

Fungsi khusus Neptunus join()

Tersedia dalam Database Neptunus dan Neptunus Analytics.

Neptunus mengimplementasikan fungsi join() yang tidak ada dalam spesifikasi. openCypher Ini menciptakan string literal dari daftar literal string dan pembatas string. Dibutuhkan dua argumen:

  • Argumen pertama adalah daftar literal string.

  • Argumen kedua adalah string pembatas, yang dapat terdiri dari nol, satu, atau lebih dari satu karakter.

Contoh:

join(["abc", "def", "ghi"], ", ") // Returns "abc, def, ghi"

Fungsi khusus Neptunus removeKeyFromMap()

Tersedia dalam Database Neptunus dan Neptunus Analytics.

Neptunus mengimplementasikan fungsi removeKeyFromMap() yang tidak ada dalam spesifikasi. openCypher Ini menghapus kunci tertentu dari peta dan mengembalikan peta baru yang dihasilkan.

Fungsi ini membutuhkan dua argumen:

  • Argumen pertama adalah peta untuk menghapus kunci.

  • Argumen kedua adalah kunci untuk menghapus dari peta.

removeKeyFromMap()Fungsi ini sangat berguna dalam situasi di mana Anda ingin menetapkan nilai untuk node atau hubungan dengan membuka daftar peta. Sebagai contoh:

UNWIND [{`~id`: 'id1', name: 'john'}, {`~id`: 'id2', name: 'jim'}] as val CREATE (n {`~id`: val.`~id`}) SET n = removeKeyFromMap(val, '~id')

Nilai ID kustom untuk properti node dan hubungan

Tersedia dalam Database Neptunus 1.2.0.2 dan lebih tinggi, dan Neptunus Analytics.

Mulai rilis mesin 1.2.0.2, Neptunus telah memperluas openCypher spesifikasi sehingga Anda sekarang dapat menentukan id nilai untuk node dan hubungan di,, dan klausa. CREATE MERGE MATCH Ini memungkinkan Anda menetapkan string yang ramah pengguna alih-alih yang dihasilkan sistem untuk mengidentifikasi node dan hubunganUUIDs.

Di Neptunus Analytics, nilai id kustom tidak tersedia untuk tepi.

Awas

Ekstensi ke openCypher spesifikasi ini tidak kompatibel ke belakang, karena sekarang ~id dianggap sebagai nama properti yang dicadangkan. Jika Anda sudah menggunakan ~id sebagai properti dalam data dan kueri, Anda harus memigrasikan properti yang ada ke kunci properti baru dan menghapus yang lama. Lihat Apa yang harus dilakukan jika Anda saat ini menggunakan ~id sebagai properti.

Berikut adalah contoh yang menunjukkan cara membuat node dan hubungan yang memiliki kustomIDS:

CREATE (n {`~id`: 'fromNode', name: 'john'}) -[:knows {`~id`: 'john-knows->jim', since: 2020}] ->(m {`~id`: 'toNode', name: 'jim'})

Jika Anda mencoba membuat ID kustom yang sudah digunakan, Neptunus akan membuat kesalahan. DuplicateDataException

Berikut adalah contoh penggunaan ID kustom dalam MATCH klausa:

MATCH (n {`~id`: 'id1'}) RETURN n

Berikut adalah contoh penggunaan kustom IDs dalam MERGE klausa:

MATCH (n {name: 'john'}), (m {name: 'jim'}) MERGE (n)-[r {`~id`: 'john->jim'}]->(m) RETURN r

Apa yang harus dilakukan jika Anda saat ini menggunakan ~id sebagai properti

Dengan rilis mesin 1.2.0.2, ~id kunci dalam openCypher klausa sekarang diperlakukan sebagai id pengganti sebagai properti. Ini berarti bahwa jika Anda memiliki properti bernama~id, mengaksesnya menjadi tidak mungkin.

Jika Anda menggunakan ~id properti, yang harus Anda lakukan sebelum memutakhirkan ke rilis mesin 1.2.0.2 atau di atasnya adalah terlebih dahulu memigrasikan ~id properti yang ada ke kunci properti baru, lalu menghapus properti tersebut~id. Misalnya, kueri di bawah ini:

  • Membuat properti baru bernama 'newId' untuk semua node,

  • menyalin nilai properti '~id' ke properti 'newId',

  • dan menghapus properti '~id' dari data

MATCH (n) WHERE exists(n.`~id`) SET n.newId = n.`~id` REMOVE n.`~id`

Hal yang sama perlu dilakukan untuk setiap hubungan dalam data yang memiliki ~id properti.

Anda juga harus mengubah kueri apa pun yang Anda gunakan sebagai referensi ~id properti. Misalnya, kueri ini:

MATCH (n) WHERE n.`~id` = 'some-value' RETURN n

... akan berubah menjadi ini:

MATCH (n) WHERE n.newId = 'some-value' RETURN n

CALLdukungan subquery di Neptunus

Tersedia dalam Database Neptunus 1.4.1.0 dan lebih tinggi, dan Neptunus Analytics.

Amazon Neptunus mendukung subkueriCALL. CALLSubquery adalah bagian dari query utama yang berjalan dalam lingkup terisolasi untuk setiap input ke CALL subquery.

Misalnya, grafik berisi data tentang orang, teman mereka, dan kota tempat mereka tinggal. Kita dapat mengambil dua kota terbesar tempat setiap teman seseorang tinggal dengan menggunakan CALL subquery:

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

Dalam contoh ini, bagian kueri di dalam CALL { ... } dijalankan untuk masing-masing friend yang dicocokkan dengan klausa sebelumnyaMATCH. Ketika kueri batin dijalankan, LIMIT klausa ORDER dan bersifat lokal di kota-kota tempat seorang teman tertentu tinggal, jadi kami memperoleh (paling banyak) dua kota per teman.

Semua klausa kueri tersedia di dalam CALL subquery. Ini termasuk CALL subquery bersarang juga. Beberapa batasan untuk WITH klausa pertama dan variabel yang dipancarkan ada dan dijelaskan di bawah ini.

Lingkup variabel di dalam CALL subquery

Variabel dari klausa sebelum CALL subquery yang digunakan di dalamnya harus diimpor oleh klausa awal. WITH Tidak seperti WITH klausa reguler hanya dapat berisi daftar variabel tetapi tidak mengizinkan aliasing dan tidak dapat digunakan bersama denganDISTINCT,,, ORDER BYWHERE, SKIP atau. LIMIT

Variabel dikembalikan dari CALL subquery

Variabel yang dipancarkan dari CALL subquery ditentukan dengan klausa akhir. RETURN Perhatikan bahwa variabel yang dipancarkan tidak dapat tumpang tindih dengan variabel sebelum subquery. CALL

Batasan

Sampai sekarang, pembaruan di dalam CALL subquery tidak didukung.

Fungsi Neptunus openCypher

Tersedia dalam Database Neptunus 1.4.1.0 dan lebih tinggi, dan Neptunus Analytics.

textIndexOf

textIndexOf(text :: STRING, lookup :: STRING, from = 0 :: INTEGER?, to = -1 :: INTEGER?) :: (INTEGER?)

Mengembalikan indeks kejadian pertama lookup dalam kisaran text mulai dari offset from (inklusif), melalui offset to (eksklusif). Jika to -1, rentang berlanjut hingga akhirtext. Pengindeksan berbasis nol, dan dinyatakan dalam nilai skalar Unicode (poin kode non-pengganti).

RETURN textIndexOf('Amazon Neptune', 'e') { "results": [{ "textIndexOf('Amazon Neptune', 'e')": 8 }] }

collToSet

collToSet(values :: LIST OF ANY?) :: (LIST? OF ANY?)

Mengembalikan daftar baru yang hanya berisi elemen unik dari daftar asli. Urutan daftar asli dipertahankan (misalnya [1, 6, 5, 1, 5] pengembalian[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?)

Mengembalikan daftar baru yang berisi semua elemen unik dari first mengecualikan elemen darisecond.

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?)

Mengembalikan daftar baru yang berisi semua elemen unik dari persimpangan first dansecond.

RETURN collIntersection([2, 5, 1, 0], [1, 5]) { "results": [{ "collIntersection([2, 5, 1, 0], [1, 5])": [1, 5] }] }

Fungsi penyortiran

Bagian berikut mendefinisikan fungsi untuk mengurutkan koleksi. Fungsi-fungsi ini mengambil (dalam beberapa kasus opsional) argumen config peta, atau daftar beberapa peta tersebut, yang menentukan kunci pengurutan dan/atau arah pengurutan:

{ key: STRING, order: STRING }

Berikut key adalah properti map atau node yang nilainya akan digunakan untuk menyortir. orderadalah "asc" atau "desc" (case insensitive) untuk menentukan jenis naik atau turun, masing-masing. Secara default, penyortiran akan dilakukan dalam urutan menaik.

collSort

collSort(coll :: LIST OF ANY, config :: MAP?) :: (LIST? OF ANY?)

Mengembalikan daftar diurutkan baru yang berisi unsur-unsur dari daftar coll masukan.

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?)

Mengembalikan daftar peta diurutkan berdasarkan nilai key properti tertentu.

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?)

Mengembalikan daftar peta diurutkan berdasarkan nilai key properti tertentu, opsional menerapkan batas dan lewati.

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?)

Mengembalikan versi diurutkan dari daftar coll masukan, mengurutkan elemen node dengan nilai-nilai key properti masing-masing.

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" } }] }] }