27.13.16 Creating a Graph from Multiple PgxFrame Objects

You can create a PgxGraph with vertex PgxFrame(s) and edge PgxFrame(s).

Consider the following PgxFrame objects:

people
+--------------+
| id | name    |
+--------------+
| 1  | Alice   |
| 2  | Bob     |
| 3  | Charlie |
+--------------+

houses
+---------------------------+
| identification | location |
+---------------------------+
| 1              | Road 1   |
| 2              | Street 5 |
| 3              | Avenue 4 |
+---------------------------+

knows
+-----------+
| src | dst |
+-----------+
| 1   | 1   |
| 2   | 3   |
| 3   | 2   |
+-----------+

lives
+----------------------+
| source | destination |
+----------------------+
| 1      | 2           |
| 2      | 1           |
| 3      | 3           |
+----------------------+

You can now create a PgxGraph as shown in the following examples:

opg4j> var graphFromFramesCreator = session.createGraphFromFrames("example graph")
opg4j> graphFromFramesCreator.vertexProvider("people", people).label("people")
opg4j> graphFromFramesCreator.vertexProvider("houses", houses).vertexKeyColumn("identification")
opg4j> graphFromFramesCreator.edgeProvider("knows", "people", "people", knows).edgeKeyColumn("identifier")
opg4j> var edge_provider = graphFromFramesCreator.edgeProvider("lives", "people", "houses", lives)
opg4j> edge_provider.edgeKeyColumn("id")
opg4j> edge_provider.sourceVertexKeyColumn("source")
opg4j> edge_provider.destinationVertexKeyColumn("destination")
opg4j> edge_provider.label("lives")
opg4j> graphFromFramesCreator.partitioned(true)
opg4j> graphFromFramesCreator.vertexIdStrategy(IdStrategy.PARTITIONED_IDS)
opg4j> graphFromFramesCreator.vertexIdStrategy(IdStrategy.KEYS_AS_IDS)
opg4j> var graph = graphFromFramesCreator.create()
PgxGraphFromFramesCreator graphFromFramesCreator = session.createGraphFromFrames("example graph");
graphFromFramesCreator.vertexProvider("people", people).label("people");
graphFromFramesCreator.vertexProvider("houses", houses).vertexKeyColumn("identification");
graphFromFramesCreator.edgeProvider("knows", "people", "people", knows).edgeKeyColumn("identifier");
PgxEdgeProviderFromFramesCreator edgeProvider = graphFromFramesCreator.edgeProvider("lives", "people", "houses", lives);
edgeProvider.edgeKeyColumn("id");
edgeProvider.sourceVertexKeyColumn("source");
edgeProvider.destinationVertexKeyColumn("destination");
edgeProvider.label("lives");
graphFromFramesCreator.partitioned(true);
graphFromFramesCreator.vertexIdStrategy(IdStrategy.PARTITIONED_IDS);
graphFromFramesCreator.edgeIdStrategy(IdStrategy.KEYS_AS_IDS);
PgxGraph graph = graphFromFramesCreator.create();
vertex_providers_from_frames = [
    session.vertex_provider_from_frame("person", 
                                       people,
                                       vertex_key_column="id",
                                       label="people"),
    session.vertex_provider_from_frame("house", 
                                       frame = houses, 
                                       vertex_key_column = "identification")
]
edge_providers_from_frames = [
    session.edge_provider_from_frame("person_knows_person", 
                                     source_provider = "person", 
                                     destination_provider = "person", 
                                     frame = knows,
                                     source_vertex_column="src",
                                     destination_vertex_column="dst",
                                     edge_key_column="identifier"),
    session.edge_provider_from_frame("person_lives_at_house", 
                                     source_provider = "person", 
                                     destination_provider = "house", 
                                     frame = lives, 
                                     source_vertex_column="source", 
                                     destination_vertex_column="destination",
                                     edge_key_column="id",
                                     label="lives")
]
graph = session.graph_from_frames("example graph", 
          vertex_providers_from_frames,
          edge_providers_from_frames,
          partitioned=True,
          vertex_id_strategy="partitioned_ids",
          edge_id_strategy="keys_as_ids"
)