How to create a graph projection
As subgraphs are mainly used with Memgraph's query modules (graph algorithms),
QueryBuilder
's call()
method enables specifying the subgraph to use with a certain algorithm.
To call a procedure named test_query_module
with argument "arg"
, and run
it on a subgraph containing only nodes with label :LABEL
and their mutual
relationships build the following query:
from gqlalchemy import QueryBuilder
label = "LABEL"
query_builder = QueryBuilder().call(procedure="test_query_module",
arguments=("arg"), node_labels=label)
query_builder.execute()
The above code executes the following Cypher query:
MATCH p=(a)-->(b)
WHERE (a:LABEL)
AND (b:LABEL)
WITH project(p) AS graph
CALL test_query_module(graph, 'arg')
WHERE
and AND
clauses are used to allow for more generalization. To expand
on this code you can use multiple relationship types and node
labels. Node labels and relationship types can be passed as a single string, in
which case that string is used for all labels or types. To specify different
labels and types for entities on a path, you need to pass a list of lists,
containing a list of labels for every node on a path, and likewise for relationships. You can use this as following:
node_labels = [["COMP", "DEVICE"], ["USER"], ["SERVICE", "GATEWAY"]]
relationship_types = [["OWNER", "RENTEE"], ["USES", "MAKES"]]
relationship_directions = [RelationshipDirection.LEFT, RelationshipDirection.RIGHT]
arguments = ("arg0", 5)
query_builder = QueryBuilder().call(procedure="test_query_module",
arguments = arguments,
node_labels=node_labels,
relationship_types=relationship_types,
relationship_directions=relationship_directions)
query_builder.execute()
The above code executes the following Cypher query:
MATCH p=(a)<-[:OWNER | :RENTEE]-(b)-[:USES | :MAKES]->(c)
WHERE (a:COMP or a:DEVICE)
AND (b:USER)
AND (c:SERVICE or c:GATEWAY)
WITH project(p) AS graph
CALL test_query_module(graph, "arg0", 5)
This query calls test_query_module
on a subgraph containing all nodes labeled
USER
that have an outgoing relationship of types either OWNER
or RENTEE
towards nodes labeled COMP
or DEVICE
and also a relationship of type USES
or MAKES
towards nodes labeled SERVICE
or GATEWAY
.