「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」
Amazon Neptune での Gremlin の標準コンプライアンス
以下のセクションでは、Gremlin の Neptune 実装の概要と、Apache TinkerPop 実装との違いについて説明します。
Neptune は、一部の Gremlin ステップをエンジンにネイティブに実装し、Apache TinkerPop Gremlin 実装を使用して他のステップを処理します (「ネイティブグレムリンステップサポート Amazon Neptune」を参照)。以下のセクションでは、Neptune の実装が TinkerPop の実装と異なる場合についての概要を説明します。
Gremlin に適用される標準
-
Gremlin 言語は、正式な仕様によってではなく、Apache TinkerPop ドキュメント
と Gremlin の Apache TinkerPop 実装によって定義されます。 -
数値の形式については、Gremlin は IEEE 754 標準に従っています (IEEE 754-2019 - IEEE Standard for Floating-Point Arithmetic
。 詳細については、Wikipedia の IEEE 754 ページも参照してください)。
Neptune Gremlin 実装の相違点
Gremlin の Amazon Neptune 実装と Apache TinkerPop で定義される実装の間には、重要な違いがいくつかあります。
Gremlin コンソールと Amazon Neptune における実装の違いの具体的な例については、クイックスタートの「Gremlin を使用したグラフへのアクセス」セクションを参照してください。
実装の相違点を以下に示します。
トピック
バインド済み変数
トラバーサルオブジェクト g
は事前にバインドされています。graph
オブジェクトはサポートされていません。
TinkerPop 列挙
Neptune では、列挙値の完全修飾クラス名はサポートしていません。たとえば、Groovy リクエストでは org.apache.tinkerpop.gremlin.structure.VertexProperty.Cardinality.single
ではなく single
を使用する必要があります。
列挙型は、パラメータタイプによって決定されます。
次の表は、使用できる列挙値と関連する TinkerPop の完全修飾名を示しています。
Allowed Values | Class |
---|---|
id , key , label , 値 |
org.apache.tinkerpop.gremlin.structure.T |
T.ID , [T.key] , T.ラベル , T.値 |
org.apache.tinkerpop.gremlin.structure.T |
set , 単一 |
org.apache.tinkerpop.gremlin.structure.VertexProperty.Cardinality |
decr , インスタンス , シャッフル
|
|
Order.decr , Order.incr , Order.shuffle
|
org.apache.tinkerpop.gremlin.process.traversal.Order |
グローバル , ローカル
|
|
スコープ.global , Scope.local (スコープローカル)
|
org.apache.tinkerpop.gremlin.process.traversal.Scope |
すべて , 最初 , 最後 , 混合 |
|
normSack |
org.apache.tinkerpop.gremlin.process.traversal.SackFunctions.Barrier |
addAll , および , 割り当て , div ,
max , 分 , マイナス , グロート ,
または , sum , sumLong
|
|
キー , 値 |
|
BOTH , IN , OUT |
|
すべて , なし |
org.apache.tinkerpop.gremlin.process.traversal.step.TraversalOptionParent.Pick |
Java コード
Neptune は、サポートされている Gremlin APIs 以外の、任意の Java または Java ライブラリ呼び出しによって定義されたメソッドへの呼び出しをサポートしていません。
たとえば、java.lang.*
、Date()
、および g.V().tryNext().orElseGet()
は許可されていません。
日付および時間
Neptune は、Gremlin datetime
Groovy バリアントで送信されるクエリの日時を指定する メソッドを提供します。これには、Gremlin コンソール、HTTP REST API を使用するテキスト文字列、Groovy を使用する他のシリアル化が含まれます。日付と時刻の値は、datetime()
関数で指定される必要があります。
こののみは、Gremlin クエリをテキスト文字列として送信するメソッドに適用されます。Gremlin 言語バリアント (GLV) を使用している場合は、その言語のネイティブな日付のクラスと関数を使用する必要があります。詳細については、ベストプラクティスのセクション「GLV 時刻データのネイティブの日付と時刻の使用」を参照してください。
この datetime( )
関数は、ISO-8601 に準拠した日時 (ミリ秒での精度) の文字列値を取ります。たとえば、datetime('2018-01-01T00:00:00')
と指定します。
ISO-8601 日時形式の例は次のとおりです。
-
YYYY-MM-DD
-
YYYY-MM-DDTHH:mm
-
YYYY-MM-DDTHH:mm:SS
-
YYYY-MM-DDTHH:mm:SS.ssss
-
YYYY-MM-DDTHH:mm:SSZ
明示的なタイムゾーンが指定されている日時値をグラフに入力し、後でその値を照会すると、その値はタイムゾーン情報なしで協定世界時 (UTC) で返されます。
この理由は、Neptune がすべての日付と時刻を UTC に変換して保存し、効率的に比較できるようにするためです。これはパフォーマンスにとって重要ですが、元のタイムゾーンに関する情報が失われます。
スクリプトの実行
すべてのクエリは、トラバーサルオブジェクト g
で始まる必要があります。
文字列クエリの送信で、複数のトラバーサルは、セミコロン (;
) または改行文字 (\n
) で区切って発行することができます。実行されるように、最終以外の各ステートメントは、.iterate()
ステップで終わる必要があります。最終的なトラバーサルデータのみが返されます。これは GLV ByteCode クエリの送信には適用されない点に注意してください。
Sessions
Neptune のセッションは、長さが 10 分のみに制限されます。詳細については、「グレムリンセッション」および「TinkerPop セッションリファレンス
Transactions
Neptune は、各 Gremlin トラバーサルの開始時に新しいトランザクションを開き、トラバーサルが正常に完了したときにトランザクションを閉じます。エラーが発生すると、トランザクションはロールバックされます。
セミコロン (;
) または改行文字 (\n
) で区切られた複数のステートメントは、単一のトランザクションに含まれています。最後のもの以外の各ステートメントは、next()
ステップの実行で終わる必要があります。最終的なトラバーサルデータのみが返されます。
tx.commit()
および tx.rollback()
を使用した手動トランザクションロジックはサポートされていません。
頂点およびエッジ IDs
Neptune Gremlin 頂点およびエッジ IDs のタイプは、String
である必要があります。 頂点またはエッジの追加時に ID を指定しない場合、UUID が生成されて文字列に変換されます。たとえば、"48af8178-50ce-971a-fc41-8c9a954cea62"
です。
つまり、ユーザーが指定した IDs はサポートされますが、通常の使用ではオプションとなります。ただし、Neptune Load
コマンドでは、すべての IDs を CSV 形式の ~idNeptune フィールドを使用して指定する必要があります。
ユーザーが指定する IDs
ユーザーが指定した IDs は、以下の規定により Neptune Gremlin で許可されます。
-
指定された IDs はオプションです。
-
頂点とエッジのみがサポートされています。
-
タイプ
String
のみがサポートされます。
カスタム ID で新しい頂点を作成するには、property
ステップを id
キーワードとともに使用します。g.addV().property(id, 'customid')
。
id
キーワードを引用符で囲むことはできません。
すべての頂点 IDs は一意である必要があり、すべてのエッジ IDs は一意である必要があります。ただし、Neptune では、頂点とエッジで同じ ID を持つことができます。
g.addV()
を使用して新しい頂点を作成しようとする場合、すでにその ID を持つ頂点が存在すると、オペレーションは失敗します。この例外として、頂点に新しいラベルを指定するとオペレーションは成功しますが、新しいラベルおよび既存の頂点に指定されたすべての追加のプロパティが追加されます。Nothing
は上書きされます。新しい頂点は作成されません。頂点 ID は変更せず、一意のままになります。
たとえば、次の Gremlin コンソールコマンドは成功します。
gremlin> g.addV('label1').property(id, 'customid') gremlin> g.addV('label2').property(id, 'customid') gremlin> g.V('customid').label() ==>label1::label2
頂点プロパティ IDs
頂点プロパティ IDs は自動的に生成され、クエリを実行したときに正または負の数値で表示されます。
頂点プロパティの濃度
Neptune は、セット濃度と単一濃度をサポートしています。指定されていない場合は、セット濃度が選択されます。つまり、プロパティ値を設定した場合、値のセットにすでに表示されていない場合にのみ、プロパティに新しい値が追加されます。これは、セット
List
はサポートされていません。プロパティ濃度の詳細については、Gremlin の「
頂点プロパティの更新
値のセットに追加の値を追加せずにプロパティ値を更新するには、property
ステップで single
濃度を指定します。
g.V('exampleid01').property(single, 'age', 25)
これにより、既存のプロパティの値はすべて削除されます。
Labels
Neptune は、頂点の複数のラベルをサポートしています。ラベルを作成するとき、::
で区切ることで複数のラベルを指定できます。 たとえば、g.addV("Label1::Label2::Label3")
は頂点に 3 つの異なるラベルを追加します。ステップでは、この頂点をこれら 3 つのラベルのいずれかに一致させます。hasLabel
hasLabel("Label1")
、hasLabel("Label2")
、および hasLabel("Label3")
。
::
区切り記号は、この使用のみに予約されます。hasLabel
ステップで複数のラベルを指定することはできません。たとえば、hasLabel("Label1::Label2")
はいずれにも一致しません。
Variables
Neptune は、Gremlin 変数をサポートせず、bindings
プロパティもサポートしていません。
Timeouts
Gremlin コンソールコマンド :remote config timeout
は、ローカルタイムアウトのみを設定します。Neptune にリモートクエリタイムアウトを設定するには、neptune_query_timeout
パラメータを使用します。詳細については、「Amazon Neptune DB パラメータグループ」を参照してください。
エスケープ文字
Neptune は、Apache Groovy 言語ドキュメントの 特殊文字のエスケープ
Groovy の制限
Neptune は、g
で開始されない Groovy コマンドをサポートしていません。 これには、算術 (1+1
など)、システム呼び出し (System.nanoTime()
など)、および変数の定義 (1+1
など) が含まれます。
Neptune では、完全修飾クラス名はサポートしていません。たとえば、Groovy リクエストでは org.apache.tinkerpop.gremlin.structure.VertexProperty.Cardinality.single
ではなく single
を使用する必要があります。
Serialization
Neptune は、リクエストされた MIME タイプに基づいて、以下のシリアル化をサポートしています。
MIME type | Serialization | Configuration |
|
GryoMessageSerializerV1d0 |
ioRegistries : [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d0] |
|
GryoMessageSerializerV1d0 |
serializeResultToString : true} |
application/vnd.gremlin-v3.0+gryo |
GryoMessageSerializerV3d0 |
ioRegistries : [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0] |
|
GryoMessageSerializerV3d0 |
serializeResultToString: true |
|
GraphSONMessageSerializerGremlinV1d0 |
ioRegistries : [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d0] |
|
GraphSONMessageSerializerGremlinV2d0 |
ioRegistries : [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV2d0] |
|
|
|
|
GraphSONMessageSerializerV3d0 |
ioRegistries : [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0] |
|
GraphBinaryMessageSerializerV1 |
|
Lambda ステップ
Neptune では Lambda ステップはサポートされません。
サポートされていない Gremlin メソッド
Neptune は、以下の Gremlin メソッドをサポートしていません。
-
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal.program(org.apache.tinkerpop.gremlin.process.computer.VertexProgram)
-
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal.sideEffect(java.util.function.Consumer)
-
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal.from(org.apache.tinkerpop.gremlin.structure.Vertex)
-
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal.to(org.apache.tinkerpop.gremlin.structure.Vertex)
たとえば、次のトラバーサルは許可されません。g.V().addE('something').from(g.V().next()).to(g.V().next())
。
サポートされていない Gremlin ステプ
Neptune は、以下の Gremlin ステップをサポートしていません。
-
Gremlin io( ) ステップ
は、Neptuneではサポートされていません。たとえば、クエリ g.io("graph.xml").read().iterate()
は Neptune では機能しません。.
その他の機能
Gremlin の Neptune 実装には、graph
オブジェクトは表示されません。次のセクションでは、graph
機能のうちサポートされるものとサポートされないものについて説明します。
Gremlin グラフでサポートされている機能
以下は、Neptune Gremlinグラフによって実装される一連の機能です。これらの機能は、graph.features()
コマンドで返されるものと同じです。
Graph Feature | Enabled |
---|---|
トランザクション |
true |
ThreadedTransactions |
false |
Computer |
false |
Persistence |
true |
ConcurrentAccess |
true |
Variable Feature | Enabled |
---|---|
変数 |
false |
SerializableValues |
false |
UniformListValues |
false |
BooleanArrayValues |
false |
DoubleArrayValues |
false |
IntegerArrayValues |
false |
StringArrayValues |
false |
BooleanValues |
false |
ByteValues |
false |
DoubleValues |
false |
FloatValues |
false |
IntegerValues |
false |
LongValues |
false |
MapValues |
false |
MixedListValues |
false |
StringValues |
false |
ByteArrayValues |
false |
FloatArrayValues |
false |
LongArrayValues |
false |
Vertex Feature | Enabled |
---|---|
MetaProperties |
false |
DuplicateMultiProperties |
false |
AddVertices |
true |
RemoveVertices |
true |
MultiProperties |
true |
UserSuppliedIds |
true |
AddProperty |
true |
RemoveProperty |
true |
NumericIds |
false |
StringIds |
true |
UuidIds |
false |
CustomIds |
false |
AnyIds |
false |
Vertex Property Feature | Enabled |
---|---|
UserSuppliedIds |
false |
AddProperty |
true |
RemoveProperty |
true |
NumericIds |
true |
StringIds |
true |
UuidIds |
false |
CustomIds |
false |
AnyIds |
false |
プロパティ |
true |
SerializableValues |
false |
UniformListValues | false |
BooleanArrayValues |
false |
DoubleArrayValues |
false |
IntegerArrayValues |
false |
StringArrayValues |
false |
BooleanValues |
true |
ByteValues |
true |
DoubleValues |
true |
FloatValues |
true |
IntegerValues |
true |
LongValues |
true |
MapValues |
false |
MixedListValues |
false |
StringValues |
true |
ByteArrayValues |
false |
FloatArrayValues |
false |
LongArrayValues |
false |
Edge Feature | Enabled |
---|---|
AddEdges |
true |
RemoveEdges |
true |
UserSuppliedIds |
true |
AddProperty |
true |
RemoveProperty |
true |
NumericIds |
false |
StringIds |
true |
UuidIds |
false |
CustomIds |
false |
AnyIds |
false |
Edge Property Feature | Enabled |
---|---|
プロパティ |
true |
SerializableValues |
false |
UniformListValues |
false |
BooleanArrayValues |
false |
DoubleArrayValues |
false |
IntegerArrayValues |
false |
StringArrayValues |
false |
BooleanValues |
true |
ByteValues |
true |
DoubleValues |
true |
FloatValues |
true |
IntegerValues |
true |
LongValues |
true |
MapValues |
false |
MixedListValues |
false |
StringValues |
true |
ByteArrayValues |
false |
FloatArrayValues |
false |
LongArrayValues |
false |