PuppyGraph CLI
PuppyGraph includes a CLI featuring prompts and auto-completion, catering to those who prefer using the command line.
In this introduction, the examples presume the existence of a Docker container called puppy
, already equipped with example graph data from #explore-the-example-graph.
Start a PuppyGraph CLI
In terminal, run the command to get into PuppyGraph CLI.
____ ____ _
| _ \ _ _ _ __ _ __ _ _ / ___| _ __ __ _ _ __ | |__
| |_) | | | | | | '_ \ | '_ \ | | | | | | _ | '__| / _` | | '_ \ | '_ \
| __/ | |_| | | |_) | | |_) | | |_| | | |_| | | | | (_| | | |_) | | | | |
|_| \__,_| | .__/ | .__/ \__, | \____| |_| \__,_| | .__/ |_| |_|
|_| |_| |___/ |_|
Welcome to PuppyGraph, type help to see the command list
[PuppyGraph]>
console access PuppyGraph Gremlin Console
cypher-console access PuppyGraph Cypher Console
groovy access console to run complex groovy scripts
exit exit PuppyGraph
help show the command list
Gremlin Console
You can access the PuppyGraph Gremlin Console through the console
command.
[PuppyGraph]> console
____ ____ _
| _ \ _ _ _ __ _ __ _ _ / ___| _ __ __ _ _ __ | |__
| |_) | | | | | | '_ \ | '_ \ | | | | | | _ | '__| / _` | | '_ \ | '_ \
| __/ | |_| | | |_) | | |_) | | |_| | | |_| | | | | (_| | | |_) | | | | |
|_| \__,_| | .__/ | .__/ \__, | \____| |_| \__,_| | .__/ |_| |_|
|_| |_| |___/ |_|
Welcome to PuppyGraph!
version: 0.10
To Learn more about the graph schema:
- Use graph.show() to list all the vertex and edge labels.
- Use graph.show('$FOO') to list all the vertex and edge labels related to $FOO.
- Use graph.describe('$BAR') to list all the attributes of the label $BAR.
See https://tinkerpop.apache.org/gremlin.html to learn more about the Gremlin query language.
Here are some example queries for exploring the graph:
- Use g.V() to list all the vertices.
- Use g.E() to list all the edges.
- Use g.V().count() to get the total number of vertices.
- Use g.E().count() to get the total number of edges.
- Use g.V('$ID').out() to find out vertices that are reachable in 1-hop from the vertex $ID. For example, g.V('person:::v1').out() will find out 1-hop reachable vertices from 'person:::v1'.
- Use g.V('$ID').out().out() similarly to find out 2-hop reachable vertices from the vertex $ID.
puppy-gremlin>
Feel free to write queries as desired. To navigate back to the top level CLI, use :x
or :exit
.
puppy-gremlin> g.V().count()
Done! Elapsed time: 0.027s, rows: 1
==>6
puppy-gremlin> g.V()
Done! Elapsed time: 0.032s, rows: 6
==>v[person:::v4]
==>v[person:::v1]
==>v[person:::v2]
==>v[person:::v6]
==>v[software:::v3]
==>v[software:::v5]
puppy-gremlin> :x
Bye!
g Default graph traversal source
:help (:h) Display help message
:exit (:x) Exit PuppyGraph console (Ctrl-D)
:quit (:q) Alias to: :exit
:edit (:e) Edit the current buffer
:save (:s) Save the current buffer to a file
Cypher Console
You can access the Cypher Console through the cypher-console
command.
Make sure to initiate Cypher queries using the prefix :>
.
puppy-cypher> :> MATCH (v) RETURN count(*)
==>[count(*):6]
puppy-cypher> :> MATCH (v) RETURN v
==>[v:[_type:node,name:peter,_id:person:::v6,_label:person,age:35]]
==>[v:[_type:node,name:marko,_id:person:::v1,_label:person,age:29]]
==>[v:[_type:node,name:josh,_id:person:::v4,_label:person,age:32]]
==>[v:[_type:node,name:vadas,_id:person:::v2,_label:person,age:27]]
==>[v:[_type:node,name:ripple,_id:software:::v5,lang:java,_label:software]]
==>[v:[_type:node,name:lop,_id:software:::v3,lang:java,_label:software]]
Groovy Console
Gremlin integrates effortlessly with Groovy within the Groovy Console, allowing for the direct execution of Groovy scripts. This integration offers enhanced flexibility.
You can access the PuppyGraph Groovy Console through the groovy
command.
As a demonstration, we'll execute the example script provided below in the console.
marko_knows = g.V().has('name', 'marko').out('knows').toList()
outputs = []
for (int i = 0; i < marko_knows.size(); i++){
outputs << g.V(marko_knows[i]).values('name').next()
}
'marko knows:' + outputs
puppy-gremlin> marko_knows = g.V().has('name', 'marko').out('knows').toList()
==>v[person:::v2]
==>v[person:::v4]
puppy-gremlin> outputs = []
puppy-gremlin> for (int i = 0; i < marko_knows.size(); i++){
............1> outputs << g.V(marko_knows[i]).values('name').next()
............2> }
==>null
puppy-gremlin> 'marko knows:' + outputs
==>marko knows:[vadas, josh]
Alternatively, you can achieve the same outcome with a single-line script.
puppy-gremlin> 'marko knows:' + g.V().has('name', 'marko').out('knows').values('name').toList()
==>marko knows:[vadas, josh]
Others
Run run help
to see more information and exit
to exit PuppyGraph CLI.