

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 Neptunus
<a name="feature-opencypher-compliance"></a>

[Rilis Amazon Neptunus dari OpenCypher umumnya mendukung klausa, operator, ekspresi, fungsi, dan sintaks yang ditentukan oleh spesifikasi OpenCypher saat ini, yang merupakan Referensi Bahasa Kueri Cypher Versi 9.](https://s3.amazonaws.com/artifacts.opencypher.org/openCypher9.pdf) Keterbatasan dan perbedaan dalam dukungan Neptunus untuk OpenCypher disebut di bawah ini.

 Amazon Neptunus juga mendukung beberapa fitur di luar cakupan spesifikasi OpenCypher. Lihat [Ekstensi OpenCypher di Amazon Neptunus](access-graph-opencypher-extensions.md) 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 dan untuk informasi lebih lanjut. [Kompatibilitas Neptunus dengan Neo4j](migration-compatibility.md) [Menulis ulang kueri Cypher untuk dijalankan di OpenCypher di Neptunus](migration-opencypher-rewrites.md)

## Support untuk klausa OpenCypher di Neptune
<a name="opencypher-compliance-clauses"></a>

Neptunus mendukung klausa berikut, kecuali seperti yang disebutkan:
+ `MATCH`— Didukung, kecuali itu *`shortestPath()`* dan *`allShortestPaths()`* saat ini tidak didukung.
+ `OPTIONAL MATCH`
+ *`MANDATORY MATCH`*— saat ini **tidak** didukung di Neptunus. Neptunus, bagaimanapun, [mendukung nilai ID kustom](access-graph-opencypher-extensions.md#opencypher-compliance-custom-ids) dalam kueri. `MATCH`
+ `RETURN`— Didukung, kecuali bila digunakan dengan nilai non-statis untuk `SKIP` atau`LIMIT`. 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 untuk `SKIP` atau`LIMIT`. 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!
  ```
+ `UNWIND`
+ `WHERE`
+ `ORDER BY`
+ `SKIP`
+ `LIMIT`
+ `CREATE`— Neptunus memungkinkan Anda [membuat nilai ID kustom](access-graph-opencypher-extensions.md#opencypher-compliance-custom-ids) dalam kueri. `CREATE`
+ `DELETE`
+ `SET`
+ `REMOVE`
+ `MERGE`- Neptunus [mendukung nilai ID kustom](access-graph-opencypher-extensions.md#opencypher-compliance-custom-ids) dalam kueri. `MERGE`
+ *`CALL[YIELD...]`*— saat ini **tidak** didukung di Neptunus.
+ `UNION, UNION ALL`**— kueri hanya-baca didukung, tetapi kueri mutasi saat ini tidak didukung.**
+  `USING`— `USING` didukung dari versi mesin [1.3.2.0](https://docs.aws.amazon.com//neptune/latest/userguide/engine-releases-1.3.2.0.html). Lihat [Petunjuk kueri](https://docs.aws.amazon.com//neptune/latest/userguide/opencypher-query-hints.html) untuk informasi selengkapnya. 

## Support untuk operator OpenCypher di Neptune
<a name="opencypher-compliance-operators"></a>

Neptunus mendukung operator berikut, kecuali seperti yang disebutkan:

**Operator umum**
+ `DISTINCT`
+ `.`Operator untuk mengakses properti peta literal bersarang.

**Operator matematika**
+ Operator `+` tambahan.
+ `-`Operator pengurangan.
+ `*`Operator perkalian.
+ Operator `/` divisi.
+ Operator divisi `%` modulo.
+ Operator `^` eksponensial. *is NOT supported*

**Operator perbandingan**
+ Operator `=` tambahan.
+ Operator `<>` ketidaksetaraan.
+ Operator `<` less-than didukung kecuali jika salah satu argumennya adalah Path, List, atau Map.
+ Operator `>` yang lebih besar dari didukung kecuali jika salah satu argumennya adalah Path, List, atau Map.
+ Operator `<=` less-than-or-equal -to didukung kecuali jika salah satu argumen adalah Path, List, atau Map.
+ Operator `>=` greater-than-or-equal -to didukung kecuali jika salah satu argumen adalah Path, List, atau Map.
+ `IS NULL`
+ `IS NOT NULL`
+ `STARTS WITH`didukung jika data yang dicari adalah string.
+ `ENDS WITH`didukung jika data yang dicari adalah string.
+ `CONTAINS`didukung jika data yang dicari adalah string.

**Operator Boolean**
+ `AND`
+ `OR`
+ `XOR`
+ `NOT`

**Operator String**
+ `+`Operator penggabungan.

**Daftar operator**
+ `+`Operator penggabungan.
+ `IN`(memeriksa keberadaan item dalam daftar)

## Support untuk ekspresi OpenCypher di Neptune
<a name="opencypher-compliance-expressions"></a>

Neptunus mendukung ekspresi berikut, kecuali seperti yang disebutkan:
+ `CASE`
+ `[]`Ekspresi saat ini **tidak** didukung di Neptunus untuk mengakses kunci properti yang dihitung secara dinamis dalam node, relasi, atau peta. Misalnya, berikut ini tidak berfungsi:

  ```
  MATCH (n)
  WITH [5, n, {key: 'value'}] AS list
  RETURN list[1].name
  ```

## Support untuk fungsi OpenCypher di Neptune
<a name="opencypher-compliance-functions"></a>

Neptunus mendukung fungsi-fungsi berikut, kecuali seperti yang disebutkan:

**Fungsi predikat**
+ `exists()`

**Fungsi skalar**
+ `coalesce()`
+ `endNode()`
+ `epochmillis()`
+ `head()`
+ `id()`
+ `last()`
+ `length()`
+ `randomUUID()`
+ `properties()`
+ `removeKeyFromMap`
+ `size()`— metode kelebihan beban saat ini hanya berfungsi untuk ekspresi pola, daftar, dan string
+ `startNode()`
+ `timestamp()`
+ `toBoolean()`
+ `toFloat()`
+ `toInteger()`
+ `type()`

**Fungsi agregasi**
+ `avg()`
+ `collect()`
+ `count()`
+ `max()`
+ `min()`
+ `percentileDisc()`
+ `stDev()`
+ `percentileCont()`
+ `stDevP()`
+ `sum()`

**Daftar fungsi**
+ [`join()`](access-graph-opencypher-extensions.md#opencypher-compliance-join-function)(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()`](access-graph-opencypher-extensions.md#opencypher-compliance-join-function)(menggabungkan string dalam daftar menjadi satu string)
+ `left()`
+ `lTrim()`
+ `replace()`
+ `reverse()`
+ `right()`
+ `rTrim()`
+ `split()`
+ `substring()`
+ `toLower()`
+ `toString()`
+ `toUpper()`
+ `trim()`

**Fungsi yang ditentukan pengguna**

*User-defined functions*saat ini **tidak** didukung di Neptunus.

## Detail implementasi OpenCypher khusus Neptunus
<a name="opencypher-compliance-differences"></a>

[Bagian berikut menjelaskan cara-cara di mana implementasi Neptunus OpenCypher mungkin berbeda dari atau melampaui spesifikasi OpenCypher.](https://s3.amazonaws.com/artifacts.opencypher.org/openCypher9.pdf)

### Evaluasi jalur panjang variabel (VLP) di Neptunus
<a name="opencypher-compliance-differences-vlp"></a>

Variable length path (`VLP`) evaluasi menemukan jalur antara node dalam grafik. Panjang jalur dapat tidak dibatasi dalam kueri. Untuk mencegah siklus, [spesifikasi OpenCypher](https://s3.amazonaws.com/artifacts.opencypher.org/openCypher9.pdf) menetapkan bahwa setiap tepi harus dilalui paling banyak sekali per solusi.

Untuk VLPs, 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 konstanta, 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 Neptunus OpenCypher (database Neptunus 1.3.1.0 dan di bawahnya)
<a name="opencypher-compliance-time"></a>

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 diuraikan dari string dalam `"` format `T` *waktu `"`* *tanggal* di mana *tanggal* dan *waktu* keduanya dinyatakan dalam salah satu formulir yang didukung di bawah ini:

**Format tanggal yang didukung**
+ `yyyy-MM-dd`
+ `yyyyMMdd`
+ `yyyy-MM`
+ `yyyy-DDD`
+ `yyyyDDD`
+ `yyyy`

**Format waktu yang didukung**
+ `HH:mm:ssZ`
+ `HHmmssZ`
+ `HH:mm:ssZ`
+ `HH:mmZ`
+ `HHmmZ`
+ `HHZ`
+ `HHmmss`
+ `HH:mm:ss`
+ `HH:mm`
+ `HHmm`
+ `HH`

Contoh:

```
RETURN datetime('2022-01-01T00:01')      // or another example:
RETURN datetime('2022T0001')
```

Perhatikan bahwa semua date/time nilai di Neptunus OpenCypher disimpan dan diambil sebagai nilai UTC.

Neptunus OpenCypher menggunakan jam, `statement` yang berarti bahwa waktu yang sama digunakan sepanjang durasi kueri. Kueri yang berbeda dalam transaksi yang sama dapat menggunakan waktu instan yang berbeda.

Neptunus tidak mendukung penggunaan fungsi dalam panggilan ke. `datetime()` Misalnya, berikut ini tidak akan berfungsi:

```
CREATE (:n {date:datetime(tostring(2021))})  // ---> NOT ALLOWED!
```

Neptunus memang mendukung fungsi `epochmillis()` yang mengubah a to. `datetime` `epochmillis` Contoh:

```
MATCH (n) RETURN epochMillis(n.someDateTime)
1698972364782
```

Neptunus saat ini tidak mendukung fungsi dan operasi lain `DateTime` pada objek, seperti penambahan dan pengurangan.

### Dukungan sementara dalam implementasi Neptunus OpenCypher (Neptunus Analytics dan Neptunus Database 1.3.2.0 dan di atasnya)
<a name="opencypher-compliance-time-na"></a>

Fungsionalitas datetime berikut OpenCypher berlaku untuk Neptune Analytics. Atau, Anda dapat menggunakan parameter labmode `DatetimeMillisecond=enabled` untuk mengaktifkan fungsionalitas datetime berikut pada rilis mesin Neptunus versi 1.3.2.0 dan yang lebih baru. Untuk detail selengkapnya tentang penggunaan fungsi ini di labmode, lihat[Dukungan datetime yang diperpanjang](features-lab-mode.md#labmode-extended-datetime-support).
+ Support 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"
        }
      }
    } ]
  }
  ```
+ Support untuk memanggil fungsi datetime () melalui properti yang disimpan atau hasil perantara. Misalnya, kueri berikut tidak dimungkinkan sebelum fitur ini.

  Datetime () 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 datetime
  ```

  Datetime () 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)
  ```

  Batch membuat node 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"}
    ]
  }
  ```
+ Support untuk subset format ISO8601 datetime 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) dianggap sebagai default. 

Zona waktu

Format zona waktu yang didukung adalah:
+ \$1/- HH: mm
+ \$1/-HHmm
+ \$1/- 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 \$1 14:00. 

Date

Jika tidak ada zona waktu, atau zona waktunya 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 Januari 2024.
+ `yyyy-MM-dd`
+ `yyyyMMdd`
+ `yyyy-MM`
+ `yyyyMM`
+ `yyyy-DDD`
+ `yyyyDDD`
+ `yyyy`

Jika zona waktu selain Z dipilih, format tanggal yang didukung dibatasi sebagai berikut:
+ `yyyy-MM-dd`
+ `yyyy-DDD`
+ `yyyyDDD`

Rentang yang didukung untuk tanggal adalah dari 1400-01-01 hingga 9999-12-31.

Waktu

Jika tidak ada zona waktu, atau zona waktunya adalah UTC (Z), format waktu yang didukung adalah:
+ `HH:mm:ss.SSS`
+ `HH:mm:ss`
+ `HHmmss.SSS`
+ `HHmmss`
+ `HH:mm`
+ `HHmm`
+ `HH`

Jika zona waktu selain Z dipilih, format waktu yang didukung dibatasi sebagai berikut:
+ `HH:mm:ss`
+ `HH:mm:ss.SSS`

### Perbedaan semantik bahasa Neptunus OpenCypher
<a name="opencypher-compliance-semantics"></a>

Neptunus mewakili simpul dan IDs 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.

Jenis `INTEGER` data terbatas pada 64 bit. Saat mengonversi nilai floating point atau string yang lebih besar menjadi bilangan bulat menggunakan `TOINTEGER` fungsi, nilai negatif terpotong `LLONG_MIN` dan nilai positif dipotong menjadi. `LLONG_MAX`

Contoh:

```
RETURN TOINTEGER(2^100)
>  9223372036854775807

RETURN TOINTEGER(-1 * 2^100)
>  -9223372036854775808
```

### Properti multi-nilai
<a name="openCypher-compliance-mvp"></a>

 Meskipun OpenCypher CREATE tidak membuat properti multi-nilai, mereka dapat ada dalam data yang dibuat menggunakan Gremlin (Database Neptunus) atau saat memuat data (Database Neptunus dan Neptunus Analytics). Jika Neptunus OpenCypher menemukan properti multi-nilai, salah satu nilai dipilih secara sewenang-wenang, menciptakan hasil non-deterministik. 

### Penanganan NaN valuse
<a name="openCypher-compliance-handling-nan"></a>

 Penanganan Neptunus terhadap perbandingan nilai `NaN` properti tidak terdefinisi. Mengandalkan perbandingan tersebut dapat menghasilkan hasil yang tidak terduga atau non-deterministik. 