翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon Neptune でのopenCypher 仕様コンプライアンス
openCypher の Amazon Neptune リリースでは、通常、Cypher クエリ言語リファレンスバージョン 9 である current openCypher 仕様によって で定義された句、演算子、式、関数、構文がサポートされています。 https://s3.amazonaws.com/artifacts.opencypher.org/openCypher9.pdf
Amazon Neptune は、 openCypher 仕様の範囲を超えるいくつかの機能もサポートしています。詳細については、「Amazon Neptune のopenCypher 拡張」を参照してください。
注記
Cypher の現在の Neo4j 実装には、上記の openCypher 仕様に含まれていない機能が含まれています。現在の Cypher コードを Neptune に移行する場合、詳細については, 「Neptune の Neo4j との互換性」と「Neptune で in openCypher を実行するように Cypher クエリを書き換える」を参照してください。
Neptune での openCypher 句のサポート
Neptune は、特に注記がなければ、以下の句をサポートしています。
MATCH
- 以下を除く、サポート対象
また、shortestPath()
は現在サポートされていません。allShortestPaths()
OPTIONAL MATCH
– は現在 Neptune ではサポートされていません。ただし、Neptune はMANDATORY MATCH
MATCH
クエリでの カスタム ID 値をサポートしています。-
RETURN
— サポートされています。ただし、SKIP
またはLIMIT
として非静的な値が使用される場合を除きます。例えば、以下は現時点では機能しません。MATCH (n) RETURN n LIMIT toInteger(rand()) // Does NOT work!
-
WITH
— サポートされています。ただし、SKIP
またはLIMIT
として非静的な値が使用される場合を除きます。例えば、以下は現時点では機能しません。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
— Neptune では、CREATE
クエリでカスタム ID 値を作成できます。DELETE
SET
REMOVE
MERGE
- Neptune はMERGE
クエリでのカスタム ID 値をサポートしています。
— は現在 Neptune ではサポートされていません。CALL[YIELD...]
UNION, UNION ALL
— 読み取り専用クエリはサポートされていますが、ミューテーションクエリは現在サポートされていません。-
USING
–USING
はエンジンバージョン 1.3.2.0 でサポートされています。詳細については、「クエリヒント」を参照してください。
Neptune での openCypher 演算子のサポート
Neptune は、特に注記がなければ、以下の演算子をサポートしています。
一般的な演算子
DISTINCT
ネストされたリテラルマップのプロパティにアクセスするための
.
演算子。
算術演算子
+
加算演算子。-
減算演算子。*
乗算演算子。/
除算演算子。%
剰余除算演算子。^
指数演算子is NOT supported
.
比較演算子
=
加算演算子。<>
不等式演算子。<
小なり演算子は、引数のいずれかが Path、List、または Map の場合を除いてサポートされます。>
大なり演算子は、引数のいずれかが Path、List、または Map の場合を除いてサポートされます。<=
less-than-or-equal-to 演算子は、引数がパス、リスト、マップのいずれかである場合を除き、サポートされます。>=
greater-than-or-equal-to 演算子は、引数がパス、リスト、マップのいずれかである場合を除き、サポートされます。IS NULL
IS NOT NULL
STARTS WITH
は、検索するデータが文字列の場合にサポートされます。ENDS WITH
は、検索するデータが文字列の場合にサポートされます。CONTAINS
は、検索するデータが文字列の場合にサポートされます。
ブール演算子
AND
OR
XOR
NOT
文字列演算子
+
連結演算子。
演算子一覧
+
連結演算子。IN
(リスト内の項目の存在を確認します)
Neptune での openCypher 式のサポート
Neptune は、特に注記がなければ、以下の式をサポートしています。
CASE
-
ノード、リレーションシップ、またはマップ内で動的に計算されたプロパティキーにアクセスするための
[]
式は、現在、Neptune ではサポートされていません。例えば、以下は機能しません。MATCH (n) WITH [5, n, {key: 'value'}] AS list RETURN list[1].name
Neptune での for openCypher 関数のサポート
Neptune は、特に注記がなければ、以下の関数をサポートしています。
述語関数
exists()
スカラー関数
coalesce()
endNode()
epochmillis()
head()
id()
last()
length()
randomUUID()
properties()
removeKeyFromMap
size()
— このオーバーロードされたメソッドは、現在のところ、パターン表現、リスト、文字列に対してのみ機能します。startNode()
timestamp()
toBoolean()
toFloat()
toInteger()
type()
集計関数
avg()
collect()
count()
max()
min()
percentileDisc()
stDev()
percentileCont()
stDevP()
sum()
関数の一覧表示
join() (リスト内の文字列を 1 つの文字列に連結する)
keys()
labels()
nodes()
range()
relationships()
reverse()
tail()
数学関数 — 数値
abs()
ceil()
floor()
rand()
round()
sign()
数学関数 — 対数
e()
exp()
log()
log10()
sqrt()
数学関数 — 三角関数
acos()
asin()
atan()
atan2()
cos()
cot()
degrees()
pi()
radians()
sin()
tan()
文字列関数
join() (リスト内の文字列を 1 つの文字列に連結する)
left()
lTrim()
replace()
reverse()
right()
rTrim()
split()
substring()
toLower()
toString()
toUpper()
trim()
ユーザー定義関数
User-defined functions
は現在、Neptune ではサポートされていません。
Neptune 固有の openCypher 実装の詳細
以下のセクションでは、Neptune の openCypher 実装が openCypher 仕様
Neptune での可変長パス (VLP) の評価
可変長パス (VLP
) 評価は、グラフ内のノード間のパスを検出します。クエリではパスの長さに制限はありません。サイクルを防ぐために、openCypher 仕様
VLPs の場合、Neptune 実装はプロパティ等価フィルターの定数値のみをサポートするという点で、 openCypher 仕様から逸脱しています。次のようなクエリがあるとします。
MATCH (x)-[:route*1..2 {dist:33, code:x.name}]->(y) return x,y
x.name
プロパティ等価フィルターの値は定数ではないため、このクエリの結果は UnsupportedOperationException
になり、Property predicate over variable-length relationships with non-constant
expression is not supported in this release.
というメッセージが表示されます。
Neptune openCypher 実装 (Neptune データベース 1.3.1.0 以前) での一時的なサポート
Neptune は現在、openCypher での時間関数のサポートを制限しています。時間型の DateTime
データ型をサポートしています。
datetime()
関数を使用して、次のように現在の UTC の日時を取得できます。
RETURN datetime() as res
日付と時刻の値は、"
dateT
time"
形式で文字列から解析できます。ここで、date と time は、どちらも以下のサポートされている形式のいずれかで表されます。
サポートされている日付形式
yyyy-MM-dd
yyyyMMdd
yyyy-MM
yyyy-DDD
yyyyDDD
yyyy
サポートされている時刻形式
HH:mm:ssZ
HHmmssZ
HH:mm:ssZ
HH:mmZ
HHmmZ
HHZ
HHmmss
HH:mm:ss
HH:mm
HHmm
HH
例えば:
RETURN datetime('2022-01-01T00:01') // or another example: RETURN datetime('2022T0001')
Neptune openCypher のすべての日付/時刻値は UTC 値として保存および取得されることに注意してください。
Neptune openCypher はstatement
クロックを使用します。つまり、クエリの実行中に同じインスタントが使用されます。同じトランザクション内の別のクエリでは、時間的に異なるインスタントが使用される場合があります。
Neptune は datetime()
の呼び出し内での関数の使用をサポートしていません。例えば、以下は機能しません。
CREATE (:n {date:datetime(tostring(2021))}) // ---> NOT ALLOWED!
Neptune は datetime
を epochmillis
に変換する epochmillis()
関数をサポートしています。例えば:
MATCH (n) RETURN epochMillis(n.someDateTime) 1698972364782
Neptune は現在、DateTime
オブジェクトに対する他の関数や演算 (加算や減算など) をサポートしていません。
Neptune openCypher 実装の一時的なサポート (Neptune Analytics および Neptune Database 1.3.2.0 以降)
Neptune Analytics には OpenCypher の次の日時機能が適用されます。または、 ラボモードパラメータを使用してDatetimeMillisecond=enabled
、Neptune エンジンリリースバージョン 1.3.2.0 以降で次の日時機能を有効にすることもできます。ラボモードでこの機能を使用する方法の詳細については、「」を参照してください日時サポートの拡張。
-
ミリ秒のサポート。日時リテラルは、ミリ秒が 0 であっても、常にミリ秒単位で返されます。(以前の動作では、ミリ秒を切り捨てていました)。
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" } } } ] }
-
保存されたプロパティまたは中間結果に対する datetime() 関数の呼び出しのサポート。例えば、この機能の前には、次のクエリを実行できませんでした。
プロパティに対する Datetime():
// 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():
// Parse datetime from parameter UNWIND $list as myDate RETURN datetime(myDate) as d
-
上記の場合、 で作成された日時のアクセス許可を保存できるようになりました。
あるプロパティの文字列プロパティから別のプロパティに日時を保存する:
// 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 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"} ] }
-
ISO8601 日時形式のより大きなサブセットのサポート。以下の「」を参照してください。
サポートされる形式
日時値の形式は [Date]T[Time][Timezone] で、T は区切り文字です。明示的なタイムゾーンが指定されていない場合、UTC (Z) がデフォルトと見なされます。
タイムゾーン
サポートされているタイムゾーン形式は次のとおりです。
-
+/-HH:mm
-
+/-HHmm
-
+/-HH
日時文字列にタイムゾーンが存在するかどうかはオプションです。タイムゾーンオフセットが 0 の場合、上記のタイムゾーンのプレフィックスの代わりに Z を使用して UTC 時間を指定できます。サポートされているタイムゾーンの範囲は -14:00 から +14:00 です。
日付
タイムゾーンが存在しない場合、またはタイムゾーンが UTC (Z) の場合、サポートされている日付形式は次のとおりです。
注記
DDDは序数の日付を指します。序数の日付は、001 から 365 (うるう年は 366) までの年を表す日を表します。例えば、2024 年 002 は 2024 年 1 月 2 日を表します。
yyyy-MM-dd
yyyyMMdd
yyyy-MM
yyyyMM
yyyy-DDD
yyyyDDD
yyyy
Z 以外のタイムゾーンを選択した場合、サポートされている日付形式は次のように制限されます。
yyyy-MM-dd
yyyy-DDD
yyyyDDD
サポートされている日付の範囲は 1400-01-01 から 9999-12-31 です。
[時間]
タイムゾーンが存在しない場合、またはタイムゾーンが UTC (Z) の場合、サポートされている時間形式は次のとおりです。
HH:mm:ss.SSS
HH:mm:ss
HHmmss.SSS
HHmmss
HH:mm
HHmm
HH
Z 以外のタイムゾーンを選択した場合、サポートされている時間形式は次のように制限されます。
HH:mm:ss
HH:mm:ss.SSS
Neptune openCypher 言語セマンティクスの違い
Neptune は、ノードとリレーションシップの IDs を整数ではなく文字列として表します。ID は、データローダーによって指定された ID と等しくなります。カラムに名前空間がある場合、名前空間に ID を加えたもの。よって、id
関数は、整数の代わりに文字列を返します。
INTEGER
データ型は 64 ビットに制限されています。より大きな浮動小数点値または文字列値を整数に変換する場合TOINTEGER
関数、負の値は LLONG_MIN
に切り捨てられ、正の値は LLONG_MAX
に切り捨てられます。
例えば:
RETURN TOINTEGER(2^100) > 9223372036854775807 RETURN TOINTEGER(-1 * 2^100) > -9223372036854775808
複数値プロパティ
openCypher CREATE Wordは複数値プロパティを作成しませんが、Gremlin (Neptune データベース) を使用して作成されたデータや、データのロード時 (Neptune データベースと Neptune Analytics) に存在できます。Neptune openCypher が複数値プロパティを検出すると、いずれかの値が任意選択され、非決定的な結果が作成されます。