-
Notifications
You must be signed in to change notification settings - Fork 58
Gremlin Steps
okram edited this page Aug 28, 2012
·
23 revisions
Gremlin is a graph traversal language developed by TinkerPop. Faunus, as of the current release, provides a subset of the Gremlin steps. For sake of clarity, the Gremlin that compiles down to Pipes and is used for real-time traversals against a graph database is denoted Gremlin/Pipes. The Gremlin that is distributed with Faunus and compiles down to MapReduce is denoted Gremlin/Faunus.
There are major conceptual differences between Gremlin/Pipes and Gremlin/Faunus. These differences are itemized below.
- Gremlin/Faunus is breadth-first. Gremlin/Pipes is depth-first.
- Gremlin/Faunus processes rows of an adjacency matrix. Gremlin/Pipes processes elements in a linked-list.
- Gremlin/Faunus is inherently parallel with each vertex being operated on simultaneously. Gremlin is inherently serial with one element at a time being pushed through the pipeline.
The table below presents a the steps provided with Faunus/Gremlin.
Gremlin/Faunus step | Description | Reduce? | |||
---|---|---|---|---|---|
_() |
the identity step that simply updates Hadoop counters | false | |||
transforms | |||||
transform(closure) |
call the closure with current elements as argument | false | |||
V() |
start a traversal at all vertices | false | |||
E() |
start a traversal at all edges | false | |||
v(id..) |
start a traversal a some vertices | false | |||
out(labels..) |
traverse out from current vertices to label-related vertices | true | |||
in(labels..) |
traverse in from current vertices to label-related vertices | true | |||
outE(labels..) |
traverse from current vertices to outgoing label edges | true | |||
inE(labels..) |
traverse from current vertices to incoming label edges | true | |||
outV() |
traverse from current edges to outgoing vertices | false | |||
inV() |
traverse from current edges to incoming vertices | false | |||
property(key) |
emit the the property value of current elements | false | | path() |
emit the path taken up to the current elements | false |
filters | |||||
filter(closure) |
A generic filter that takes a boolean-closure | false | |||
has(key,value) |
filter elements that don’t have key/value property | false | |||
has(key,compare,value..) |
filter elements that don’t have compared key/value property | false | |||
hasNot(key,value..) |
filter elements that do have key/value property | false | |||
hasNot(key,compare,value..) |
filter elements that do have compared key/value property | false | |||
interval(key,value1,value2) |
filter elements that don’t have value in range | false | |||
dedup() |
remove any duplicates in current traversal step | false | |||
back(step) |
go back to elements seen previous | true |