SlideShare a Scribd company logo
1 of 50
Download to read offline
Cypher and Apache Spark
Multiple graphs and more in
openCypher
Stefan Plantikow, Martin Junghanns,
Max Kießling, Petra Selmer
(:openCypher)-[:IS_GOING]->(:Places)
openCypher in 2017
openCypher
is a community effort to evolve the standard graph query language Cypher
openCypher implementers: SAP, Redis, Agens Graph, Cypher.PL, Neo4j, ...
openCypher events: Implementers meeting, Summer of Syntax
openCypher process: Cypher Improvement Requests and Proposals (CIPs/CIRs)
openCypher releases: Fronted, Grammar, TCK
openCypher research: Formal semantics (U Edinburgh), Stream processing, …
openCypher & standards: LDBC, ISO SQL PG Ad-Hoc …
openCypher features: Multiple graphs, subqueries, path patterns, ...
Cypher originally conceived in the context of OLTP workloads at Neo4j.
Beyond OLTP, many Neo4j customers have a data lake and use Apache Spark
for
- Big Data analytical processing
- Data integration (wrangling)
- Today's big data applications
○ Collect data from user interactions at website
○ Combine with other data from various departments (billing, marketing, ...)
○ Combine with ontological data
○ Analyze to better target customers, optimize supply chains, detect fraud, ...
Is Cypher ready to be used in a big data lake context?
Cypher for Big Data
- Data integration
○ Use multiple, large-scale data sets
○ Retain and reuse intermediary results
○ Integrate multiple data sources
○ Shape and handle heterogeneous data
- Complex Execution
○ Compose complex workflows from building blocks
○ Use machine learning, AI, graph algorithms, domain specific business logic
○ Distributed query execution in a cluster
- Common framework: Apache Spark over Hadoop (+ Neo4j)
Distilling Graphs from the Data Lake
(:Cypher)-[:FOR]->(:Apache:Spark™)
Spark Package for the execution of Cypher on Apache Spark
- Execute Cypher queries on multiple large, distributed graphs
- Integrate Cypher into your Spark analytical pipeline
- Integrate multiple data sources (Neo4j, HDFS, Local FS, ...)
- Handle heterogeneous data
- Compose Cypher queries
- Made by Neo4j, donated to to the openCypher community
- Alpha release of source code under APL2 on GitHub. Available Now:
github.com/openCypher/cypher-for-apache-spark
- Release 1.0: Targeted for first half 2018
- Commercial extension for integrating more sophisticated data sources
- Innovations:
○ Technical Architecture for executing Cypher on a big-data analytics system
○ Composable queries for working with multiple graphs
CAPS
MATCH (n:Person)-[:LOVES]->(s1:System {title: “Neo4j”})
OPTIONAL MATCH (n)-[:LOVES]->(s2:System {title: “Spark”})
RETURN n, s1, s2
openCypher Frontend
CAPS
Spark Catalyst Optimizer
Spark Runtime
➢ Based on proven Neo4j Cypher parser
➢ Parsing, Rewriting, Optimization
➢ Data Import and Export
➢ Schema and Type handling
➢ Query translation to DataFrame operations
➢ Rule based query optimization
➢ Distributed execution
Data in Spark
Spark's core: Transform tabular data
SparkSQL Table => Table => Table
Cypher 9 (Single) Graph => Table
How to handle multiple graphs?
(:Cypher)-[:WITH]->(:Multiple:Graphs)
Graph Transformation
Why Multiple Graphs?
- Combining and transforming graphs from multiple sources
- Versioning, snapshotting, computing difference graphs
- Graph views for access control
- Provisioning applications with tailored graph views
- Shaping and integrating heterogenous graph data
- Roll-up and drill-down at different levels of detail
Graph
Management
Graph
Modeling
Cypher today: Single graph model
Graph Database System
(e.g. a cluster)
The (single) Graph
Application Server
Client 1
Client 2
Client 3
Cypher: Multiple graphs model
Graph Database System
(e.g. a cluster)
Graph Space
Application Server
Client 1
Client 2
Client 3
Tables from graphs...
It's easy to construct tables from a graph... but what's the inverse?
MATCH (a)-->(b) WITH a, b ...
...graphs from tables
...a graph is a set of pattern matches!
WITH a, r, b RETURN GRAPH OF (a)-[r]->(b) AS foo
Cypher
queries
with
multiple
graphs
Cypher
query
pipeline
composition
Current CAPS Multiple Graphs Syntax
FROM GRAPH graph_A AT "bolt://.../people"
MATCH (a:Person)-[:KNOWS]-(b:Person)
FROM GRAPH graph_B AT "hdfs://.../products"
MATCH (:Customer {name: a.name})-[:BOUGHT]->(p:Product)
RETURN GRAPH OF (b)-[:SHOULD_BUY]->(p)
(Ongoing work in CIP2017-06-18: Multiple Graphs)
Cypher support for multiple graphs
- Graphs are addressed using URIs
- Graphs and tabular data are passed into and returned from a query
Extensions
- Set operations and subqueries over multiple graphs
- Updating graphs (DML)
- Managing graph persistence (Move, Snapshot, Version, ...)
- Creating views
- Schema and constraint definitions for multiple graphs
...
=> Join the openCypher MG Task Force
(:Cypher)-[:ON]->(:Relational:Engine)
Challenge: Graph engine vs. Relational engine
Neo4j Apache Spark
Graph Format Native (i.e. optimized for graph ops) DataFrame (i.e. tables)
Query operators Native (e.g. Expand, VarExpand) Relational operators
Schema Schema optional Fixed Schema
Data types Cypher type system Spark SQL type system
Node labels:
:Employee
name: STRING
:Person
name: STRING
job: INTEGER (nullable)
:System
title: STRING
Relationship types:
:KNOWS
name: STRING
:LOVES
Implied Labels:
:Employee -> :Person
:Employee:Person
{ name : Alice }
:Person
{ name : Bob, yob : 1984 }
:System
{ title : Spark }
:KNOWS
{ since : 2017 }
:LOVES:LOVES:LOVES
:System
{ title : Neo4j }
● Required for Spark DataFrame
• Explicitly defined (e.g. for HDFS data source)
• Implicitly inferred (e.g. for Neo4j data source)
● Requires type mapping from Cypher types to Spark types
:Employee:Person
{ name : Alice }
:Person
{ name : Bob, yob : 1984 }
:System
{ title : Spark }
:KNOWS
{ since : 2017 }
:LOVES:LOVES:LOVES
:System
{ title : Neo4j }
Logical view
Physical view (DataFrame)
NodeScan(Person)
n n:Employee n.name n.yob
0 true Alice null
1 false Bob 1984
NodeScan(System)
n n.title
2 Spark
3 Neo4j
RelScan(KNOWS)
src(r) r trgt(r) n.since
0 0 1 2017
RelScan(KNOWS)
src(r) r trgt(r)
0 1 2
0 2 3
1 3 3
MATCH (n:Person)-[:LOVES]->(s1:System {title: “Neo4j”})
OPTIONAL MATCH (n)-[:LOVES]->(s2:Database {title: “Spark”})
RETURN n, s1, s2
Logical view
Physical view (DataFrame operations)
NodeScan(System)
RelScan(LOVES)
NodeScan(Person)
ResultAPPLY MAGIC
HERE
Result
n n.name n.yob n:Person s1 s1.title s1:System s2 s2.title s2:System
0 Alice null true 3 Neo4j true 2 Spark true
1 Bob 1984 true 3 Neo4j true null null null
MATCH (n:Person)-[:LOVES]->(s1:System {title: “Neo4j”})
OPTIONAL MATCH (n)-[:LOVES]->(s2:Database {title: “Spark”})
RETURN n, s1, s2
:Employee:Person
{ name : Alice }
:Person
{ name : Bob, yob : 1984 }
:System
{ title : Spark }
:KNOWS
{ since : 2017 }
:LOVES
:LOVES
:LOVES
:System
{ title : Neo4j }
Logical view
Physical view (DataFrame)
• Programmatic, high-level API (similar to Sparks’ DataFrame API)
• Central entry point: CAPSSession
1: val sparkSession = SparkSession.builder().master("local[*]").appName("caps-example").getOrCreate()
2: val capsSession = CAPSSession.create(sparkSession)
3: val graph = capsSession.graphAt("hdfs://localhost:9000/path/to/graph")
4: val result = graph.cypher("MATCH (n:Person)-[:LOVES]->(s:System) RETURN n.name, s.title")
5: result.print
+---------------------------------------------+
| n.name | s.title |
+---------------------------------------------+
| 'Alice' | 'Neo4j' |
| 'Alice' | 'Spark' |
| 'Bob' | 'Neo4j' |
+---------------------------------------------+
(3 rows)
• Mount graphs from multiple sources
• Store graphs in session-local graph storage
1: capsSession.mountGraphAt("hdfs+csv://localhost:9000/path/to/graph", "/my-hdfs-graph")
2: capsSession.mountGraphAt(
"bolt://localhost:7687&MATCH (n) RETURN n;MATCH ()-[r]->() RETURN r",
"/my-neo-graph"
)
3: val result = capsSession.cypher("""
FROM GRAPH AT 'session://my-hdfs-graph'
MATCH (e:Employee)
FROM GRAPH AT 'session://my-neo-graph'
MATCH (p:Person)
WHERE e.email = p.email
RETURN GRAPH result OF (e)-[:SAME_AS]->(p)
""").graphs("result")
4: result.cypher("MATCH ()-[e]->() RETURN COUNT(e)")
(:Cypher)-[:FOR]->(Apache:Spark™)
Demo
• Target specific customers in selected metropolitan areas as part of a marketing campaign
• Combine multi-region social network data with product data to derive recommendations
• Social network is partitioned by region (SN_NA, SN_EU) and stored in separate Neo4j instances
• Product data is stored in HDFS using a CAPS-specific CSV format
:Person {
name : Bob,
email : bob@gmail.com
}
:Person {
name : Alice,
email : alice@gmail.com
}
:Interest
{ name : Graphs }
:KNOWS
:LIKES:LIVES_IN:LIVES_IN
:City
{ name : New York }
:Customer
{ email : alice@gmail.com }
:Product
{ name : Graph Databases }
:BOUGHT {
rating : 5,
votes : 10
helpful : 6
}
:BELONGS_TO
:Category
{ name : Books }
Social Network (SN) Products (PROD)
1. Load data from the corresponding data sources (i.e. Neo4j and HDFS)
2. Extract metropolitan subgraphs from Social Networks (e.g. people from NY / SFO for SN_NA)
3. Merge Social Network data with Product data using identifying properties (i.e. Email)
4. Compute recommendations based on friends’ interests and bought products
:Person {
name : Bob,
email : bob@gmail.com
}
:Person {
name : Alice,
email : alice@gmail.com
}
:Interest
{ name : Graphs }
:KNOWS
:LIKES:LIVES_IN:LIVES_IN
:City
{ name : New York }
:Customer
{ email : alice@gmail.com }
:Product
{ name : Graph Databases }
:BOUGHT {
rating : 5,
votes : 10
helpful : 6
}
:BELONGS_TO
:Category
{ name : Books }
Social Network (SN) Products (PROD)
:IS
(:Let)-[:MAGIC*]->(:Happen)
(:openCypher)-[:EVOLVES]->(:Cypher)
How does a feature make it into Cypher?
CIR = Cypher Improvement Request
- Ideas & suggestions, topics for discussion, …
- Raise a Github issue at https://github.com/opencypher/openCypher
CIP = Cypher Improvement Proposal
- Response to a CIR
- Full description of behaviour and syntax
- Create a Pull Request at https://github.com/opencypher/openCypher
openCypher
openCypher Implementers Group (oCIG)
- Evolve Cypher through an open process
- Comprises vendors, researchers, implementers, interested parties
Face-to-face and virtual meetings to present, discuss and agree upon new
features
- Germany (February)
- UK (May)
- France (November)
(:Cypher)-[:WITH]->(:Subqueries)
Why?
Why?
Queries are easier to
- construct
- maintain
- read
Subqueries enable
- composition of query pipelines
- post-processing of results
- multiple write actions for each record
Example: Post-UNION processing
MATCH {
// authored tweets
MATCH (me:User {name: 'Alice'})-[:FOLLOWS]->(user:User),
(user)<-[:AUTHORED]-(tweet:Tweet)
RETURN tweet, tweet.time AS time, user.country AS country
UNION
// favorited tweets
MATCH (me:User {name: 'Alice'})-[:FOLLOWS]->(user:User),
(user)<-[:HAS_FAVOURITE]-(favorite:Favorite)-[:TARGETS]->(tweet:Tweet)
RETURN tweet, favourite.time AS time, user.country AS country
}
WHERE country = 'se'
RETURN DISTINCT tweet
ORDER BY time DESC
LIMIT 10
Types of subqueries
Nested
- Run any complete read-only Cypher query
- Incoming variables remain in scope: correlated subquery
- Arbitrary depth
Existential returns true if at least one match found; false otherwise
Scalar result is a single value in a single row
List result is the list formed by collecting all the values of all rows (single value per row)
Updating: simple and conditional updates, executed once per incoming row
(Cypher)-[:WITH]->(Path:Pattern:Queries)
Why?
Find complex connections
Repetitions of patterns:
( likes.hates )+
Alternatives between patterns rather than just a single relationship type:
( drinks | eats )*
Express patterns directly, rather than resorting to using UNION
Example: a sad state of affairs...
Find a chain of unreciprocated lovers:
PATH PATTERN unreciprocated_love = (a)-[:LOVES]->(b)
WHERE NOT EXISTS { (b)-[:LOVES]->(a) }
MATCH (you)-/~unreciprocated_love*/->(someone)
Named
Path
Predicate
Relationship Type Predicate ()-/:FOO/-()
Node Predicates ()-/(:Alpha {beta:'gamma'})/-()
Alternation ()-/:FOO | :BAR | :BAZ/-()
Sequence ()-/:FOO :BAR :BAZ/-()
Grouping ()-/:FOO | [:BAR :BAZ]/-()
Direction ()-/<:FOO :BAR <:BAZ>/->()
Repetition ()-/:FOO? :BAR+ :BAZ* :FOO*3.. :BAR*1..5/-()
(:Cypher)-[:IS]->(:Everywhere)
openCypher: Summer of Syntax
Multiple graphs
Subqueries
Path pattern queries (complex pattern matching)
Aggregation and grouping
MANDATORY MATCH
Configurable pattern matching
Cypher versioning & Cypher 9
Want to find out more?
Join us at the openCypher Meetup!
Wednesday, 25 October, 5:30pm - 8pm
WeWork Park South at 110 East 28th Street, NY
Agenda
- Multiple graphs, subqueries, path pattern queries
- Connecting research in graph processing to industrial technologies
- Property graphs with time
(Cypher)-[:IS]->(:Everywhere)
CAPS core alpha source release with multiple graphs out now,
production-ready release next year
Plus commercial release (from Neo4j):
Data lake integration and other sophisticated graph data sources
Also: Cypher over Gremlin is in the works! => Cypher everywhere
openCypher continues to evolve: Get involved! openCypher.org
Upcoming
- openCypher booth here at GraphConnect NYC
- openCypher meetup tomorrow: opencypher.org/event/2017/10/25/event-oc-meetup/
- Third openCypher implementers meeting: opencypher.org/event/2017/11/13/ocim3/
(:Thank)-[:-]->(:You)
stefan.plantikow@neo4j.com, martin.junghanns@neo4j.com, max.kiessling@neo4j.com, petra.selmer@neo4j.com

More Related Content

What's hot

The openCypher Project - An Open Graph Query Language
The openCypher Project - An Open Graph Query LanguageThe openCypher Project - An Open Graph Query Language
The openCypher Project - An Open Graph Query Language
Neo4j
 

What's hot (20)

The openCypher Project - An Open Graph Query Language
The openCypher Project - An Open Graph Query LanguageThe openCypher Project - An Open Graph Query Language
The openCypher Project - An Open Graph Query Language
 
Beyond SQL: Speeding up Spark with DataFrames
Beyond SQL: Speeding up Spark with DataFramesBeyond SQL: Speeding up Spark with DataFrames
Beyond SQL: Speeding up Spark with DataFrames
 
APOC Pearls - Whirlwind Tour Through the Neo4j APOC Procedures Library
APOC Pearls - Whirlwind Tour Through the Neo4j APOC Procedures LibraryAPOC Pearls - Whirlwind Tour Through the Neo4j APOC Procedures Library
APOC Pearls - Whirlwind Tour Through the Neo4j APOC Procedures Library
 
Spark Summit EU 2015: Spark DataFrames: Simple and Fast Analysis of Structure...
Spark Summit EU 2015: Spark DataFrames: Simple and Fast Analysis of Structure...Spark Summit EU 2015: Spark DataFrames: Simple and Fast Analysis of Structure...
Spark Summit EU 2015: Spark DataFrames: Simple and Fast Analysis of Structure...
 
Introducing DataFrames in Spark for Large Scale Data Science
Introducing DataFrames in Spark for Large Scale Data ScienceIntroducing DataFrames in Spark for Large Scale Data Science
Introducing DataFrames in Spark for Large Scale Data Science
 
Graph databases: Tinkerpop and Titan DB
Graph databases: Tinkerpop and Titan DBGraph databases: Tinkerpop and Titan DB
Graph databases: Tinkerpop and Titan DB
 
Teaching Apache Spark: Demonstrations on the Databricks Cloud Platform
Teaching Apache Spark: Demonstrations on the Databricks Cloud PlatformTeaching Apache Spark: Demonstrations on the Databricks Cloud Platform
Teaching Apache Spark: Demonstrations on the Databricks Cloud Platform
 
Scio - Moving to Google Cloud, A Spotify Story
 Scio - Moving to Google Cloud, A Spotify Story Scio - Moving to Google Cloud, A Spotify Story
Scio - Moving to Google Cloud, A Spotify Story
 
Write Graph Algorithms Like a Boss Andrew Ray
Write Graph Algorithms Like a Boss Andrew RayWrite Graph Algorithms Like a Boss Andrew Ray
Write Graph Algorithms Like a Boss Andrew Ray
 
TinkerPop: a story of graphs, DBs, and graph DBs
TinkerPop: a story of graphs, DBs, and graph DBsTinkerPop: a story of graphs, DBs, and graph DBs
TinkerPop: a story of graphs, DBs, and graph DBs
 
Cypher
CypherCypher
Cypher
 
Introduction to SparkR
Introduction to SparkRIntroduction to SparkR
Introduction to SparkR
 
Optimizing Apache Spark SQL Joins
Optimizing Apache Spark SQL JoinsOptimizing Apache Spark SQL Joins
Optimizing Apache Spark SQL Joins
 
Interpreting Relational Schema to Graphs
Interpreting Relational Schema to GraphsInterpreting Relational Schema to Graphs
Interpreting Relational Schema to Graphs
 
Mapreduce in Search
Mapreduce in SearchMapreduce in Search
Mapreduce in Search
 
Lessons from the Field, Episode II: Applying Best Practices to Your Apache S...
 Lessons from the Field, Episode II: Applying Best Practices to Your Apache S... Lessons from the Field, Episode II: Applying Best Practices to Your Apache S...
Lessons from the Field, Episode II: Applying Best Practices to Your Apache S...
 
ETL to ML: Use Apache Spark as an end to end tool for Advanced Analytics
ETL to ML: Use Apache Spark as an end to end tool for Advanced AnalyticsETL to ML: Use Apache Spark as an end to end tool for Advanced Analytics
ETL to ML: Use Apache Spark as an end to end tool for Advanced Analytics
 
Physical Plans in Spark SQL
Physical Plans in Spark SQLPhysical Plans in Spark SQL
Physical Plans in Spark SQL
 
Scio
ScioScio
Scio
 
SparkR: Enabling Interactive Data Science at Scale
SparkR: Enabling Interactive Data Science at ScaleSparkR: Enabling Interactive Data Science at Scale
SparkR: Enabling Interactive Data Science at Scale
 

Similar to Cypher and apache spark multiple graphs and more in open cypher

Graph Features in Spark 3.0: Integrating Graph Querying and Algorithms in Spa...
Graph Features in Spark 3.0: Integrating Graph Querying and Algorithms in Spa...Graph Features in Spark 3.0: Integrating Graph Querying and Algorithms in Spa...
Graph Features in Spark 3.0: Integrating Graph Querying and Algorithms in Spa...
Databricks
 
GraphX: Graph analytics for insights about developer communities
GraphX: Graph analytics for insights about developer communitiesGraphX: Graph analytics for insights about developer communities
GraphX: Graph analytics for insights about developer communities
Paco Nathan
 

Similar to Cypher and apache spark multiple graphs and more in open cypher (20)

Morpheus SQL and Cypher® in Apache® Spark - Big Data Meetup Munich
Morpheus SQL and Cypher® in Apache® Spark - Big Data Meetup MunichMorpheus SQL and Cypher® in Apache® Spark - Big Data Meetup Munich
Morpheus SQL and Cypher® in Apache® Spark - Big Data Meetup Munich
 
Morpheus - SQL and Cypher in Apache Spark
Morpheus - SQL and Cypher in Apache SparkMorpheus - SQL and Cypher in Apache Spark
Morpheus - SQL and Cypher in Apache Spark
 
Graph Features in Spark 3.0: Integrating Graph Querying and Algorithms in Spa...
Graph Features in Spark 3.0: Integrating Graph Querying and Algorithms in Spa...Graph Features in Spark 3.0: Integrating Graph Querying and Algorithms in Spa...
Graph Features in Spark 3.0: Integrating Graph Querying and Algorithms in Spa...
 
Intro to Apache Spark and Scala, Austin ACM SIGKDD, 7/9/2014
Intro to Apache Spark and Scala, Austin ACM SIGKDD, 7/9/2014Intro to Apache Spark and Scala, Austin ACM SIGKDD, 7/9/2014
Intro to Apache Spark and Scala, Austin ACM SIGKDD, 7/9/2014
 
Scala 20140715
Scala 20140715Scala 20140715
Scala 20140715
 
New Features in Neo4j 3.4 / 3.3 - Graph Algorithms, Spatial, Date-Time & Visu...
New Features in Neo4j 3.4 / 3.3 - Graph Algorithms, Spatial, Date-Time & Visu...New Features in Neo4j 3.4 / 3.3 - Graph Algorithms, Spatial, Date-Time & Visu...
New Features in Neo4j 3.4 / 3.3 - Graph Algorithms, Spatial, Date-Time & Visu...
 
What's New in Neo4j - David Allen, Neo4j
What's New in Neo4j  - David Allen, Neo4jWhat's New in Neo4j  - David Allen, Neo4j
What's New in Neo4j - David Allen, Neo4j
 
Neo4j Morpheus: Interweaving Table and Graph Data with SQL and Cypher in Apac...
Neo4j Morpheus: Interweaving Table and Graph Data with SQL and Cypher in Apac...Neo4j Morpheus: Interweaving Table and Graph Data with SQL and Cypher in Apac...
Neo4j Morpheus: Interweaving Table and Graph Data with SQL and Cypher in Apac...
 
Big Data Processing with .NET and Spark (SQLBits 2020)
Big Data Processing with .NET and Spark (SQLBits 2020)Big Data Processing with .NET and Spark (SQLBits 2020)
Big Data Processing with .NET and Spark (SQLBits 2020)
 
Composable Parallel Processing in Apache Spark and Weld
Composable Parallel Processing in Apache Spark and WeldComposable Parallel Processing in Apache Spark and Weld
Composable Parallel Processing in Apache Spark and Weld
 
Data Science
Data ScienceData Science
Data Science
 
Big data analysis using spark r published
Big data analysis using spark r publishedBig data analysis using spark r published
Big data analysis using spark r published
 
Neo4j Introduction (for Techies)
Neo4j Introduction (for Techies)Neo4j Introduction (for Techies)
Neo4j Introduction (for Techies)
 
Graph Analytics in Spark
Graph Analytics in SparkGraph Analytics in Spark
Graph Analytics in Spark
 
Using Neo4j from Java
Using Neo4j from JavaUsing Neo4j from Java
Using Neo4j from Java
 
Neo4j Database and Graph Platform Overview
Neo4j Database and Graph Platform OverviewNeo4j Database and Graph Platform Overview
Neo4j Database and Graph Platform Overview
 
Enabling Exploratory Analysis of Large Data with Apache Spark and R
Enabling Exploratory Analysis of Large Data with Apache Spark and REnabling Exploratory Analysis of Large Data with Apache Spark and R
Enabling Exploratory Analysis of Large Data with Apache Spark and R
 
Dev Ops Training
Dev Ops TrainingDev Ops Training
Dev Ops Training
 
managing big data
managing big datamanaging big data
managing big data
 
GraphX: Graph analytics for insights about developer communities
GraphX: Graph analytics for insights about developer communitiesGraphX: Graph analytics for insights about developer communities
GraphX: Graph analytics for insights about developer communities
 

More from Neo4j

More from Neo4j (20)

Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
QIAGEN: Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
QIAGEN: Biomedical Knowledge Graphs for Data Scientists and BioinformaticiansQIAGEN: Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
QIAGEN: Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered Sustainability
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 
ISDEFE - GraphSummit Madrid - ARETA: Aviation Real-Time Emissions Token Accre...
ISDEFE - GraphSummit Madrid - ARETA: Aviation Real-Time Emissions Token Accre...ISDEFE - GraphSummit Madrid - ARETA: Aviation Real-Time Emissions Token Accre...
ISDEFE - GraphSummit Madrid - ARETA: Aviation Real-Time Emissions Token Accre...
 
BBVA - GraphSummit Madrid - Caso de éxito en BBVA: Optimizando con grafos
BBVA - GraphSummit Madrid - Caso de éxito en BBVA: Optimizando con grafosBBVA - GraphSummit Madrid - Caso de éxito en BBVA: Optimizando con grafos
BBVA - GraphSummit Madrid - Caso de éxito en BBVA: Optimizando con grafos
 
Graph Everywhere - Josep Taruella - Por qué Graph Data Science en tus modelos...
Graph Everywhere - Josep Taruella - Por qué Graph Data Science en tus modelos...Graph Everywhere - Josep Taruella - Por qué Graph Data Science en tus modelos...
Graph Everywhere - Josep Taruella - Por qué Graph Data Science en tus modelos...
 
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4j
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4jGraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4j
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4j
 
Neo4j_Exploring the Impact of Graph Technology on Financial Services.pdf
Neo4j_Exploring the Impact of Graph Technology on Financial Services.pdfNeo4j_Exploring the Impact of Graph Technology on Financial Services.pdf
Neo4j_Exploring the Impact of Graph Technology on Financial Services.pdf
 
Rabobank_Exploring the Impact of Graph Technology on Financial Services.pdf
Rabobank_Exploring the Impact of Graph Technology on Financial Services.pdfRabobank_Exploring the Impact of Graph Technology on Financial Services.pdf
Rabobank_Exploring the Impact of Graph Technology on Financial Services.pdf
 
Webinar - IA generativa e grafi Neo4j: RAG time!
Webinar - IA generativa e grafi Neo4j: RAG time!Webinar - IA generativa e grafi Neo4j: RAG time!
Webinar - IA generativa e grafi Neo4j: RAG time!
 
IA Generativa y Grafos de Neo4j: RAG time
IA Generativa y Grafos de Neo4j: RAG timeIA Generativa y Grafos de Neo4j: RAG time
IA Generativa y Grafos de Neo4j: RAG time
 
Neo4j: Data Engineering for RAG (retrieval augmented generation)
Neo4j: Data Engineering for RAG (retrieval augmented generation)Neo4j: Data Engineering for RAG (retrieval augmented generation)
Neo4j: Data Engineering for RAG (retrieval augmented generation)
 
Neo4j Graph Summit 2024 Workshop - EMEA - Breda_and_Munchen.pdf
Neo4j Graph Summit 2024 Workshop - EMEA - Breda_and_Munchen.pdfNeo4j Graph Summit 2024 Workshop - EMEA - Breda_and_Munchen.pdf
Neo4j Graph Summit 2024 Workshop - EMEA - Breda_and_Munchen.pdf
 
Enabling GenAI Breakthroughs with Knowledge Graphs
Enabling GenAI Breakthroughs with Knowledge GraphsEnabling GenAI Breakthroughs with Knowledge Graphs
Enabling GenAI Breakthroughs with Knowledge Graphs
 
Neo4j_Anurag Tandon_Product Vision and Roadmap.Benelux.pptx.pdf
Neo4j_Anurag Tandon_Product Vision and Roadmap.Benelux.pptx.pdfNeo4j_Anurag Tandon_Product Vision and Roadmap.Benelux.pptx.pdf
Neo4j_Anurag Tandon_Product Vision and Roadmap.Benelux.pptx.pdf
 
Neo4j Jesus Barrasa The Art of the Possible with Graph
Neo4j Jesus Barrasa The Art of the Possible with GraphNeo4j Jesus Barrasa The Art of the Possible with Graph
Neo4j Jesus Barrasa The Art of the Possible with Graph
 

Recently uploaded

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Recently uploaded (20)

From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 

Cypher and apache spark multiple graphs and more in open cypher

  • 1. Cypher and Apache Spark Multiple graphs and more in openCypher Stefan Plantikow, Martin Junghanns, Max Kießling, Petra Selmer
  • 3. openCypher in 2017 openCypher is a community effort to evolve the standard graph query language Cypher openCypher implementers: SAP, Redis, Agens Graph, Cypher.PL, Neo4j, ... openCypher events: Implementers meeting, Summer of Syntax openCypher process: Cypher Improvement Requests and Proposals (CIPs/CIRs) openCypher releases: Fronted, Grammar, TCK openCypher research: Formal semantics (U Edinburgh), Stream processing, … openCypher & standards: LDBC, ISO SQL PG Ad-Hoc … openCypher features: Multiple graphs, subqueries, path patterns, ...
  • 4. Cypher originally conceived in the context of OLTP workloads at Neo4j. Beyond OLTP, many Neo4j customers have a data lake and use Apache Spark for - Big Data analytical processing - Data integration (wrangling) - Today's big data applications ○ Collect data from user interactions at website ○ Combine with other data from various departments (billing, marketing, ...) ○ Combine with ontological data ○ Analyze to better target customers, optimize supply chains, detect fraud, ... Is Cypher ready to be used in a big data lake context? Cypher for Big Data
  • 5. - Data integration ○ Use multiple, large-scale data sets ○ Retain and reuse intermediary results ○ Integrate multiple data sources ○ Shape and handle heterogeneous data - Complex Execution ○ Compose complex workflows from building blocks ○ Use machine learning, AI, graph algorithms, domain specific business logic ○ Distributed query execution in a cluster - Common framework: Apache Spark over Hadoop (+ Neo4j) Distilling Graphs from the Data Lake
  • 7. Spark Package for the execution of Cypher on Apache Spark - Execute Cypher queries on multiple large, distributed graphs - Integrate Cypher into your Spark analytical pipeline - Integrate multiple data sources (Neo4j, HDFS, Local FS, ...) - Handle heterogeneous data - Compose Cypher queries
  • 8. - Made by Neo4j, donated to to the openCypher community - Alpha release of source code under APL2 on GitHub. Available Now: github.com/openCypher/cypher-for-apache-spark - Release 1.0: Targeted for first half 2018 - Commercial extension for integrating more sophisticated data sources - Innovations: ○ Technical Architecture for executing Cypher on a big-data analytics system ○ Composable queries for working with multiple graphs CAPS
  • 9. MATCH (n:Person)-[:LOVES]->(s1:System {title: “Neo4j”}) OPTIONAL MATCH (n)-[:LOVES]->(s2:System {title: “Spark”}) RETURN n, s1, s2 openCypher Frontend CAPS Spark Catalyst Optimizer Spark Runtime ➢ Based on proven Neo4j Cypher parser ➢ Parsing, Rewriting, Optimization ➢ Data Import and Export ➢ Schema and Type handling ➢ Query translation to DataFrame operations ➢ Rule based query optimization ➢ Distributed execution
  • 10. Data in Spark Spark's core: Transform tabular data SparkSQL Table => Table => Table Cypher 9 (Single) Graph => Table How to handle multiple graphs?
  • 13. Why Multiple Graphs? - Combining and transforming graphs from multiple sources - Versioning, snapshotting, computing difference graphs - Graph views for access control - Provisioning applications with tailored graph views - Shaping and integrating heterogenous graph data - Roll-up and drill-down at different levels of detail Graph Management Graph Modeling
  • 14. Cypher today: Single graph model Graph Database System (e.g. a cluster) The (single) Graph Application Server Client 1 Client 2 Client 3
  • 15. Cypher: Multiple graphs model Graph Database System (e.g. a cluster) Graph Space Application Server Client 1 Client 2 Client 3
  • 16. Tables from graphs... It's easy to construct tables from a graph... but what's the inverse? MATCH (a)-->(b) WITH a, b ...
  • 17. ...graphs from tables ...a graph is a set of pattern matches! WITH a, r, b RETURN GRAPH OF (a)-[r]->(b) AS foo
  • 20. Current CAPS Multiple Graphs Syntax FROM GRAPH graph_A AT "bolt://.../people" MATCH (a:Person)-[:KNOWS]-(b:Person) FROM GRAPH graph_B AT "hdfs://.../products" MATCH (:Customer {name: a.name})-[:BOUGHT]->(p:Product) RETURN GRAPH OF (b)-[:SHOULD_BUY]->(p) (Ongoing work in CIP2017-06-18: Multiple Graphs)
  • 21. Cypher support for multiple graphs - Graphs are addressed using URIs - Graphs and tabular data are passed into and returned from a query Extensions - Set operations and subqueries over multiple graphs - Updating graphs (DML) - Managing graph persistence (Move, Snapshot, Version, ...) - Creating views - Schema and constraint definitions for multiple graphs ... => Join the openCypher MG Task Force
  • 23. Challenge: Graph engine vs. Relational engine Neo4j Apache Spark Graph Format Native (i.e. optimized for graph ops) DataFrame (i.e. tables) Query operators Native (e.g. Expand, VarExpand) Relational operators Schema Schema optional Fixed Schema Data types Cypher type system Spark SQL type system
  • 24. Node labels: :Employee name: STRING :Person name: STRING job: INTEGER (nullable) :System title: STRING Relationship types: :KNOWS name: STRING :LOVES Implied Labels: :Employee -> :Person :Employee:Person { name : Alice } :Person { name : Bob, yob : 1984 } :System { title : Spark } :KNOWS { since : 2017 } :LOVES:LOVES:LOVES :System { title : Neo4j } ● Required for Spark DataFrame • Explicitly defined (e.g. for HDFS data source) • Implicitly inferred (e.g. for Neo4j data source) ● Requires type mapping from Cypher types to Spark types
  • 25. :Employee:Person { name : Alice } :Person { name : Bob, yob : 1984 } :System { title : Spark } :KNOWS { since : 2017 } :LOVES:LOVES:LOVES :System { title : Neo4j } Logical view Physical view (DataFrame) NodeScan(Person) n n:Employee n.name n.yob 0 true Alice null 1 false Bob 1984 NodeScan(System) n n.title 2 Spark 3 Neo4j RelScan(KNOWS) src(r) r trgt(r) n.since 0 0 1 2017 RelScan(KNOWS) src(r) r trgt(r) 0 1 2 0 2 3 1 3 3
  • 26. MATCH (n:Person)-[:LOVES]->(s1:System {title: “Neo4j”}) OPTIONAL MATCH (n)-[:LOVES]->(s2:Database {title: “Spark”}) RETURN n, s1, s2 Logical view Physical view (DataFrame operations) NodeScan(System) RelScan(LOVES) NodeScan(Person) ResultAPPLY MAGIC HERE
  • 27. Result n n.name n.yob n:Person s1 s1.title s1:System s2 s2.title s2:System 0 Alice null true 3 Neo4j true 2 Spark true 1 Bob 1984 true 3 Neo4j true null null null MATCH (n:Person)-[:LOVES]->(s1:System {title: “Neo4j”}) OPTIONAL MATCH (n)-[:LOVES]->(s2:Database {title: “Spark”}) RETURN n, s1, s2 :Employee:Person { name : Alice } :Person { name : Bob, yob : 1984 } :System { title : Spark } :KNOWS { since : 2017 } :LOVES :LOVES :LOVES :System { title : Neo4j } Logical view Physical view (DataFrame)
  • 28. • Programmatic, high-level API (similar to Sparks’ DataFrame API) • Central entry point: CAPSSession 1: val sparkSession = SparkSession.builder().master("local[*]").appName("caps-example").getOrCreate() 2: val capsSession = CAPSSession.create(sparkSession) 3: val graph = capsSession.graphAt("hdfs://localhost:9000/path/to/graph") 4: val result = graph.cypher("MATCH (n:Person)-[:LOVES]->(s:System) RETURN n.name, s.title") 5: result.print +---------------------------------------------+ | n.name | s.title | +---------------------------------------------+ | 'Alice' | 'Neo4j' | | 'Alice' | 'Spark' | | 'Bob' | 'Neo4j' | +---------------------------------------------+ (3 rows)
  • 29. • Mount graphs from multiple sources • Store graphs in session-local graph storage 1: capsSession.mountGraphAt("hdfs+csv://localhost:9000/path/to/graph", "/my-hdfs-graph") 2: capsSession.mountGraphAt( "bolt://localhost:7687&MATCH (n) RETURN n;MATCH ()-[r]->() RETURN r", "/my-neo-graph" ) 3: val result = capsSession.cypher(""" FROM GRAPH AT 'session://my-hdfs-graph' MATCH (e:Employee) FROM GRAPH AT 'session://my-neo-graph' MATCH (p:Person) WHERE e.email = p.email RETURN GRAPH result OF (e)-[:SAME_AS]->(p) """).graphs("result") 4: result.cypher("MATCH ()-[e]->() RETURN COUNT(e)")
  • 31. • Target specific customers in selected metropolitan areas as part of a marketing campaign • Combine multi-region social network data with product data to derive recommendations • Social network is partitioned by region (SN_NA, SN_EU) and stored in separate Neo4j instances • Product data is stored in HDFS using a CAPS-specific CSV format :Person { name : Bob, email : bob@gmail.com } :Person { name : Alice, email : alice@gmail.com } :Interest { name : Graphs } :KNOWS :LIKES:LIVES_IN:LIVES_IN :City { name : New York } :Customer { email : alice@gmail.com } :Product { name : Graph Databases } :BOUGHT { rating : 5, votes : 10 helpful : 6 } :BELONGS_TO :Category { name : Books } Social Network (SN) Products (PROD)
  • 32. 1. Load data from the corresponding data sources (i.e. Neo4j and HDFS) 2. Extract metropolitan subgraphs from Social Networks (e.g. people from NY / SFO for SN_NA) 3. Merge Social Network data with Product data using identifying properties (i.e. Email) 4. Compute recommendations based on friends’ interests and bought products :Person { name : Bob, email : bob@gmail.com } :Person { name : Alice, email : alice@gmail.com } :Interest { name : Graphs } :KNOWS :LIKES:LIVES_IN:LIVES_IN :City { name : New York } :Customer { email : alice@gmail.com } :Product { name : Graph Databases } :BOUGHT { rating : 5, votes : 10 helpful : 6 } :BELONGS_TO :Category { name : Books } Social Network (SN) Products (PROD) :IS
  • 35. How does a feature make it into Cypher? CIR = Cypher Improvement Request - Ideas & suggestions, topics for discussion, … - Raise a Github issue at https://github.com/opencypher/openCypher CIP = Cypher Improvement Proposal - Response to a CIR - Full description of behaviour and syntax - Create a Pull Request at https://github.com/opencypher/openCypher
  • 36. openCypher openCypher Implementers Group (oCIG) - Evolve Cypher through an open process - Comprises vendors, researchers, implementers, interested parties Face-to-face and virtual meetings to present, discuss and agree upon new features - Germany (February) - UK (May) - France (November)
  • 38. Why?
  • 39. Why? Queries are easier to - construct - maintain - read Subqueries enable - composition of query pipelines - post-processing of results - multiple write actions for each record
  • 40. Example: Post-UNION processing MATCH { // authored tweets MATCH (me:User {name: 'Alice'})-[:FOLLOWS]->(user:User), (user)<-[:AUTHORED]-(tweet:Tweet) RETURN tweet, tweet.time AS time, user.country AS country UNION // favorited tweets MATCH (me:User {name: 'Alice'})-[:FOLLOWS]->(user:User), (user)<-[:HAS_FAVOURITE]-(favorite:Favorite)-[:TARGETS]->(tweet:Tweet) RETURN tweet, favourite.time AS time, user.country AS country } WHERE country = 'se' RETURN DISTINCT tweet ORDER BY time DESC LIMIT 10
  • 41. Types of subqueries Nested - Run any complete read-only Cypher query - Incoming variables remain in scope: correlated subquery - Arbitrary depth Existential returns true if at least one match found; false otherwise Scalar result is a single value in a single row List result is the list formed by collecting all the values of all rows (single value per row) Updating: simple and conditional updates, executed once per incoming row
  • 43. Why? Find complex connections Repetitions of patterns: ( likes.hates )+ Alternatives between patterns rather than just a single relationship type: ( drinks | eats )* Express patterns directly, rather than resorting to using UNION
  • 44. Example: a sad state of affairs... Find a chain of unreciprocated lovers: PATH PATTERN unreciprocated_love = (a)-[:LOVES]->(b) WHERE NOT EXISTS { (b)-[:LOVES]->(a) } MATCH (you)-/~unreciprocated_love*/->(someone) Named Path Predicate
  • 45. Relationship Type Predicate ()-/:FOO/-() Node Predicates ()-/(:Alpha {beta:'gamma'})/-() Alternation ()-/:FOO | :BAR | :BAZ/-() Sequence ()-/:FOO :BAR :BAZ/-() Grouping ()-/:FOO | [:BAR :BAZ]/-() Direction ()-/<:FOO :BAR <:BAZ>/->() Repetition ()-/:FOO? :BAR+ :BAZ* :FOO*3.. :BAR*1..5/-()
  • 47. openCypher: Summer of Syntax Multiple graphs Subqueries Path pattern queries (complex pattern matching) Aggregation and grouping MANDATORY MATCH Configurable pattern matching Cypher versioning & Cypher 9
  • 48. Want to find out more? Join us at the openCypher Meetup! Wednesday, 25 October, 5:30pm - 8pm WeWork Park South at 110 East 28th Street, NY Agenda - Multiple graphs, subqueries, path pattern queries - Connecting research in graph processing to industrial technologies - Property graphs with time
  • 49. (Cypher)-[:IS]->(:Everywhere) CAPS core alpha source release with multiple graphs out now, production-ready release next year Plus commercial release (from Neo4j): Data lake integration and other sophisticated graph data sources Also: Cypher over Gremlin is in the works! => Cypher everywhere openCypher continues to evolve: Get involved! openCypher.org Upcoming - openCypher booth here at GraphConnect NYC - openCypher meetup tomorrow: opencypher.org/event/2017/10/25/event-oc-meetup/ - Third openCypher implementers meeting: opencypher.org/event/2017/11/13/ocim3/