Cypher for Gremlin And more... And more... And - - PowerPoint PPT Presentation

cypher for gremlin and more and more and more match p
SMART_READER_LITE
LIVE PREVIEW

Cypher for Gremlin And more... And more... And - - PowerPoint PPT Presentation

Cypher for Gremlin And more... And more... And more... MATCH (p:Planet)-[orbit:ORBITS]->(:Star {name: 'Sun'}) WHERE orbit.au < 5 RETURN p AS planet; g.V().as('p').hasLabel('Planet')


slide-1
SLIDE 1
slide-2
SLIDE 2
slide-3
SLIDE 3

Cypher for Gremlin

And more... And more... And more...

slide-4
SLIDE 4

MATCH (p:Planet)-[orbit:ORBITS]->(:Star {name: 'Sun'}) WHERE orbit.au < 5 RETURN p AS planet; g.V().as('p').hasLabel('Planet') .outE('ORBITS').has('au', lt(5)) .inV().hasLabel('Star').has('name', eq('Sun')) .select('p').project('planet').by(valueMap().with(tokens))

slide-5
SLIDE 5
  • And more...
slide-6
SLIDE 6
slide-7
SLIDE 7
slide-8
SLIDE 8
slide-9
SLIDE 9
slide-10
SLIDE 10
  • gremlin(...)
  • MATCH (n:person {name: 'marko'})

RETURN gremlin("select('n').outE().label()") as r

slide-11
SLIDE 11

Translator<String, GroovyPredicate> translator = Translator.builder() .gremlinGroovy() .enableCypherExtensions() .enable(TranslatorFeature.EXPERIMENTAL_GREMLIN_FUNCTION) .build();

slide-12
SLIDE 12

* As suggested in GQL Scope and Features

slide-13
SLIDE 13

QUERY friends($a VERTEX) { MATCH ($a)-[:FRIEND_OF]-(b) RETURN count(b) AS num_friends } CALL friends(a) YIELD num_friends QUERY friends($a VERTEX) { FOREIGN "gremlin" CALL "a.outE('FRIEND_OF').count().as('num_friends')" YIELD num_friends::NUMERIC } Prototype

slide-14
SLIDE 14
  • MATCH (n)

FOREIGN "gremlin" USING n CALL "n.hasLabel('person').as('p').values('age').as('b')" YIELD p, b RETURN labels(p)[0] as a, b LIMIT 1 Prototype

slide-15
SLIDE 15

MATCH (n) FOREIGN "gremlin" CALL "select('n').hasLabel('person').as('p').values('age').as('b')" YIELD p, b RETURN labels(p)[0] as a, b LIMIT 1 Prototype

slide-16
SLIDE 16
  • MATCH (n)

FOREIGN "gremlin" CALL "select('n').hasLabel('person').as('p').values('age').as('b')" YIELD p::NODE, b::NUMERIC RETURN labels(p)[0] as a, b LIMIT 1 Prototype

slide-17
SLIDE 17
  • WITH 1 as n

FOREIGN "gremlin" CALL "constant(2).as('n')" RETURN n //n = 1 Prototype

slide-18
SLIDE 18
slide-19
SLIDE 19
slide-20
SLIDE 20
  • gremlin> g.cypher("MATCH (n) RETURN n").select("n").outE().label().dedup()

==>created ==>knows

slide-21
SLIDE 21
slide-22
SLIDE 22

1. 2. 3.

slide-23
SLIDE 23

SELECT ?a ?b ?c WHERE { ?a v:label "person" . ?a e:knows ?b . ?a e:created ?c . ?b e:created ?c . ?a v:age ?d . FILTER (?d <= 30) } g.V().match( .as(‘a’).hasLabel(‘person’), .as(‘a’).out(‘knows’).as(‘b’), .as(‘a’).out(‘created’).as(‘c’), .as(‘b’).out(‘created’).as(‘c’), .as(‘a’).values(‘age’).as(‘d’).where('d',lte(30))).select(‘a’,’b’,’c’)

match()-step

slide-24
SLIDE 24
slide-25
SLIDE 25
slide-26
SLIDE 26
  • gremlin> :install org.apache.tinkerpop sparql-gremlin 3.4.0

==>Loaded: [org.apache.tinkerpop, sparql-gremlin, 3.4.0] gremlin> :plugin use tinkerpop.sparql ==>tinkerpop.sparql activated gremlin> graph = TinkerFactory.createModern() ==>tinkergraph[vertices:6 edges:6] gremlin> g = graph.traversal(SparqlTraversalSource) ==>sparqltraversalsource[tinkergraph[vertices:6 edges:6], standard] gremlin> g.sparql("""SELECT ?name ?age WHERE { ?person v:name ?name . ?person v:age ?age } ORDER BY ASC(?age)""") ==>[name:vadas,age:27] ==>[name:marko,age:29] ==>[name:josh,age:32] ==>[name:peter,age:35]

slide-27
SLIDE 27
  • gremlin>g.sparql("SELECT * WHERE { }").outE().label().dedup()

==>created ==>knows similar to …

gremlin> g.cypher("MATCH (n) RETURN n").select("n").outE().label().dedup() ==>created ==>knows

slide-28
SLIDE 28
  • conceptual example:

SELECT ?a WHERE { ?a v:label "person" . { GREMLIN(select(“a”).values(“name”)) } }

slide-29
SLIDE 29

SELECT

slide-30
SLIDE 30

http://gremlinator.iai.uni-bonn.de:8080/Demo/ http://195.201.31.31:8080/Demo/ (mirror)

slide-31
SLIDE 31
slide-32
SLIDE 32
  • Cypher for Gremlin