Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Kepatuhan spesifikasi OpenCypher di Amazon Neptune
Rilis OpenCypher Amazon Neptune umumnya mendukung klausa, operator, ekspresi, fungsi, dan sintaks yang ditentukan dalam spesifikasi OpenCypher saat ini, yaitu Cypher Query Language Reference Version 9.
Amazon Neptune juga mendukung beberapa fitur di luar cakupan spesifikasi OpenCypher. Lihat Ekstensi OpenCypher di Amazon Neptunus untuk detailnya.
catatan
Implementasi Neo4j Cypher saat ini berisi fungsionalitas yang tidak terkandung dalam spesifikasi OpenCypher yang disebutkan di atas. Jika Anda memigrasikan kode Cypher saat ini ke Neptunus, lihat Kompatibilitas Neptunus dengan Neo4j dan Menulis ulang kueri Cypher untuk dijalankan di OpenCypher di Neptunus untuk informasi lebih lanjut.
Dukungan untuk klausa OpenCypher di Neptunus
Neptunus mendukung klausa berikut, kecuali sebagaimana dicatat:
MATCH— Didukung, kecuali itudan saatshortestPath()ini tidak didukung.allShortestPaths()OPTIONAL MATCH— saat ini tidak didukung di Neptunus. Namun, Neptunus mendukung nilai ID khusus dalamMANDATORY MATCHMATCHkueri.-
RETURN- Didukung, kecuali bila digunakan dengan nilai non-statis untukSKIPatauLIMIT. Misalnya, berikut ini saat ini tidak berfungsi:MATCH (n) RETURN n LIMIT toInteger(rand()) // Does NOT work! -
WITH- Didukung, kecuali bila digunakan dengan nilai non-statis untukSKIPatauLIMIT. Misalnya, berikut ini saat ini tidak berfungsi:MATCH (n) WITH n SKIP toInteger(rand()) WITH count() AS count RETURN count > 0 AS nonEmpty // Does NOT work! UNWINDWHEREORDER BYSKIPLIMITCREATE— Neptunus memungkinkan Anda membuat nilai ID khusus dalamCREATEkueri.DELETESETREMOVEMERGE— Neptunus mendukung nilai ID khusus dalamMERGEkueri.— saat ini tidak didukung di Neptunus.CALL[YIELD...]UNION, UNION ALL— kueri read-only didukung, tetapi kueri mutasi saat ini tidak didukung.-
USING-USINGdidukung dari versi mesin 1.3.2.0. Lihat Petunjuk kueri untuk informasi selengkapnya.
Dukungan untuk operator OpenCypher di Neptunus
Neptunus mendukung operator berikut, kecuali seperti yang disebutkan:
Operator umum
DISTINCT.Operator untuk mengakses properti peta literal bersarang.
Operator matematika
Operator
+penambahan.Operator
-pengurangan.Operator
*perkalian.Operator
/divisi.Operator divisi
%modulo.Operator
^eksponensiasi.is NOT supported
Operator perbandingan
Operator
=penambahan.Operator
<>ketidaksetaraan.Operator
<less-than didukung kecuali jika salah satu argumennya adalah Path, List, atau Map.Oper
>ator yang lebih besar didukung kecuali jika salah satu argumennya adalah Path, List, atau Map.Operator
<=kurang dari atau sama dengan didukung kecuali jika salah satu argumennya adalah Path, List, atau Map.Operator
>=yang lebih besar dari atau sama dengan didukung kecuali jika salah satu argumennya adalah Path, List, atau Map.IS NULLIS NOT NULLSTARTS WITHdidukung jika data yang dicari adalah string.ENDS WITHdidukung jika data yang dicari adalah string.CONTAINSdidukung jika data yang dicari adalah string.
Operator Boolean
ANDORXORNOT
Operator String
Operator
+penggabungan.
Daftar operator
Operator
+penggabungan.IN(memeriksa keberadaan item dalam daftar)
Dukungan untuk ekspresi OpenCypher di Neptunus
Neptunus mendukung ekspresi berikut, kecuali seperti yang disebutkan:
CASE-
Eksp
[]resi saat ini tidak didukung di Neptunus untuk mengakses kunci properti yang dihitung secara dinamis dalam node, hubungan, atau peta. Misalnya, berikut ini tidak berfungsi:MATCH (n) WITH [5, n, {key: 'value'}] AS list RETURN list[1].name
Dukungan untuk fungsi OpenCypher di Neptunus
Neptunus mendukung fungsi-fungsi berikut, kecuali sebagaimana dicatat:
Fungsi predikat
exists()
Fungsi skalar
coalesce()endNode()epochmillis()head()id()last()length()randomUUID()properties()removeKeyFromMapsize()- metode kelebihan beban ini saat ini hanya berfungsi untuk ekspresi pola, daftar, dan stringstartNode()timestamp()toBoolean()toFloat()toInteger()type()
Fungsi agregasi
avg()collect()count()max()min()percentileDisc()stDev()percentileCont()stDevP()sum()
Daftar fungsi
join()(menggabungkan string dalam daftar menjadi satu string)
keys()labels()nodes()range()relationships()reverse()tail()
Fungsi matematika — numerik
abs()ceil()floor()rand()round()sign()
Fungsi matematika — logaritmik
e()exp()log()log10()sqrt()
Fungsi matematika — trigonometri
acos()asin()atan()atan2()cos()cot()degrees()pi()radians()sin()tan()
Fungsi string
join()(menggabungkan string dalam daftar menjadi satu string)
left()lTrim()replace()reverse()right()rTrim()split()substring()toLower()toString()toUpper()trim()
User-defined fungsi
User-defined functionssaat ini tidak didukung di Neptunus.
Neptune-specific Rincian implementasi OpenCypher
Bagian berikut menjelaskan cara-cara di mana implementasi Neptunus dari OpenCypher mungkin berbeda dari atau melampaui spesifikasi OpenCypher.
Variable-length evaluasi jalur (VLP) di Neptunus
Evaluasi jalur panjang variabel (VLP) menemukan jalur antara node dalam grafik. Panjang jalur dapat tidak dibatasi dalam kueri. Untuk mencegah siklus, spesifikasi OpenCypher
Untuk VLP, implementasi Neptunus menyimpang dari spesifikasi OpenCypher karena hanya mendukung nilai konstan untuk filter kesetaraan properti. Ambil kueri berikut:
MATCH (x)-[:route*1..2 {dist:33, code:x.name}]->(y) return x,y
Karena nilai filter kesetaraan x.name properti bukan konstan, kueri ini menghasilkan pesan UnsupportedOperationException dengan: Property predicate over variable-length relationships with non-constant
expression is not supported in this release.
Dukungan temporal dalam implementasi Neptune OpenCypher (database Neptunus 1.3.1.0 dan di bawah)
Neptunus saat ini menyediakan dukungan terbatas untuk fungsi temporal di OpenCypher. Ini mendukung tipe DateTime data untuk tipe temporal.
datetime()Fungsi ini dapat digunakan untuk mendapatkan tanggal dan waktu UTC saat ini seperti ini:
RETURN datetime() as res
Nilai tanggal dan waktu dapat diurai dari string dalam " format " tanggal T waktu di mana tanggal dan waktu keduanya dinyatakan dalam salah satu bentuk yang didukung di bawah ini:
Format tanggal yang didukung
yyyy-MM-ddyyyyMMddyyyy-MMyyyy-DDDyyyyDDDyyyy
Format waktu yang didukung
HH:mm:ssZHHmmssZHH:mm:ssZHH:mmZHHmmZHHZHHmmssHH:mm:ssHH:mmHHmmHH
Contoh:
RETURN datetime('2022-01-01T00:01') // or another example: RETURN datetime('2022T0001')
Perhatikan bahwa semua date/time nilai di Neptune OpenCypher disimpan dan diambil sebagai nilai UTC.
Neptune OpenCypher menggunakan statement jam, yang berarti bahwa waktu yang sama digunakan selama durasi kueri. Kueri yang berbeda dalam transaksi yang sama dapat menggunakan waktu yang berbeda.
Neptunus tidak mendukung penggunaan fungsi dalam panggilan kedatetime(). Misalnya, berikut ini tidak akan berfungsi:
CREATE (:n {date:datetime(tostring(2021))}) // ---> NOT ALLOWED!
Neptunus memang mendukung epochmillis() fungsi yang mengubah a datetime menjadiepochmillis. Contoh:
MATCH (n) RETURN epochMillis(n.someDateTime) 1698972364782
Neptunus saat ini tidak mendukung fungsi dan operasi lain pada DateTime objek, seperti penambahan dan pengurangan.
Dukungan temporal dalam implementasi Neptune OpenCypher (Neptune Analytics dan Neptune Database 1.3.2.0 ke atas)
Fungsi datetime berikut OpenCypher berlaku untuk Neptune Analytics. Atau, Anda dapat menggunakan parameter labmode DatetimeMillisecond=enabled untuk mengaktifkan fungsionalitas datetime berikut pada rilis mesin Neptune versi 1.3.2.0 dan yang lebih tinggi. Untuk detail selengkapnya tentang menggunakan fungsi ini di labmode, lihatDukungan datetime yang diperpanjang.
-
Dukungan untuk milidetik. Datetime literal akan selalu dikembalikan dengan milidetik, bahkan jika milidetik adalah 0. (Perilaku sebelumnya adalah memotong milidetik.)
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" } } } ] } -
Dukungan untuk memanggil fungsi datetime () di atas properti yang disimpan atau hasil perantara. Misalnya, kueri berikut tidak dimungkinkan sebelum fitur ini.
Datetime () di atas properti:
// 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 datetimeDatetime () di atas hasil menengah:
// Parse datetime from parameter UNWIND $list as myDate RETURN datetime(myDate) as d -
Sekarang juga dimungkinkan untuk menyimpan kinerja datetime yang dibuat dalam kasus yang disebutkan di atas.
Menyimpan datetime dari properti string dari satu properti ke properti lainnya:
// 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)Buat node batch dari parameter dengan properti datetime:
// 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"} ] } -
Dukungan untuk subset format datetime ISO8601 yang lebih besar. Lihat di bawah ini.
Format yang didukung
Format nilai datetime adalah [Tanggal] T [Waktu] [Zona Waktu], di mana T adalah pemisah. Jika zona waktu eksplisit tidak disediakan, UTC (Z) diasumsikan sebagai default.
Zona waktu
Format zona waktu yang didukung adalah:
-
+/-HH:mm
-
+/-hhmm
-
+/-HH
Kehadiran zona waktu dalam string datetime adalah opsional. Jika offset zona waktu adalah 0, Z dapat digunakan sebagai pengganti postfix zona waktu di atas untuk menunjukkan waktu UTC. Rentang zona waktu yang didukung adalah dari - 14:00 hingga + 14:00.
Date
Jika tidak ada zona waktu, atau zona waktu adalah UTC (Z), format tanggal yang didukung adalah sebagai berikut:
catatan
DDD mengacu pada tanggal ordinal, yang mewakili hari dalam setahun dari 001 hingga 365 (366 dalam tahun kabisat). Misalnya, 2024-002 mewakili 2 Jan 2024.
yyyy-MM-ddyyyyMMddyyyy-MMyyyyMMyyyy-DDDyyyyDDDyyyy
Jika zona waktu selain Z dipilih, format tanggal yang didukung terbatas pada yang berikut:
yyyy-MM-ddyyyy-DDDyyyyDDD
Rentang yang didukung untuk tanggal adalah dari 1400-01-01 hingga 9999-12-31.
Waktu
Jika tidak ada zona waktu, atau zona waktu adalah UTC (Z), format waktu yang didukung adalah:
HH:mm:ss.SSSHH:mm:ssHHmmss.SSSHHmmssHH:mmHHmmHH
Jika zona waktu selain Z dipilih, format waktu yang didukung terbatas pada yang berikut:
HH:mm:ssHH:mm:ss.SSS
Perbedaan semantik bahasa Neptunus OpenCypher
Neptunus mewakili ID simpul dan hubungan sebagai string daripada bilangan bulat. ID sama dengan ID yang diberikan melalui pemuat data. Jika ada namespace untuk kolom, namespace ditambah ID. Akibatnya, id fungsi mengembalikan string, bukan integer.
Ti INTEGER pe data dibatasi hingga 64 bit. Saat mengonversi nilai float point atau string yang lebih besar ke bilangan bulat menggunakan TOINTEGER fungsi, nilai negatif dipotong menjadi LLONG_MIN dan nilai positif dipotong menjadi. LLONG_MAX
Contoh:
RETURN TOINTEGER(2^100) > 9223372036854775807 RETURN TOINTEGER(-1 * 2^100) > -9223372036854775808
Multi-valued properti
Meskipun OpenCypher CREATE tidak membuat properti multi-nilai, mereka dapat ada dalam data yang dibuat menggunakan Gremlin (Neptune Database) atau saat memuat data (Neptune Database dan Neptune Analytics). Jika Neptune OpenCypher menemukan properti multi-nilai, salah satu nilai dipilih secara sewenang-wenang, menciptakan hasil non-deterministik.
Penanganan valuse NaN
Penanganan Neptunus terhadap perbandingan nilai NaN properti tidak ditentukan. Mengandalkan perbandingan tersebut dapat menghasilkan hasil yang tidak terduga atau non-deterministik.