Using Custom Graph#

This guide walks you through the process of using custom graph data in GraphScope Interactive. The process comprises three main steps:

  • Creating a new graph,

  • Importing graph data, and

  • Starting the service with the new graph.

We’ll use the movies graph as an example, with the necessary sample files located in {INTERACTIVE_HOME}/examples/movies/.

Step 1: Create a New Graph#

Before starting, please make sure you are in the initial environment. If not, please destroy the currently running database first.

bin/gs_interactive service stop
bin/gs_interactive destroy

To create a new graph, you will need the original data of the graph. We currently support files in CSV format. Fortunately, we have prepared it for you, and you can find it in the directory {INTERACTIVE_HOME}/examples/movies/.

To begin, ensure you’ve adjusted the settings in the {INTERACTIVE_HOME}/conf/interactive.yaml file. By utilizing Docker’s volume mount feature, you can map an external folder containing the CSV files of movies to the internal directory at /home/graphscope/movies. It’s crucial that the internal data path starts with /home/graphscope and concludes with movies, reflecting the name of your graph. If you’re looking to import custom data, you can do volume mapping in a similar way.

version: v0.0.3
volume:
  # replace INTERACTIVE_HOME with actual path.
  - {INTERACTIVE_HOME}/examples/movies:/home/graphscope/movies 

Now init the database.

./bin/gs_interactive init -c ./conf/interactive.yaml

To create a new graph “movies”, execute the following command:

bin/gs_interactive database create -g movies -c ./examples/movies/graph.yaml

The ./examples/movies/graph.yaml file defines the graph schema. In this file:

  • For each vertex type, specify its name, allowed properties, primary keys (if any), and other relevant details.

  • For each edge type, define the source/destination vertex types and their associated properties.

Ensure that each graph in the file has a unique name and an associated schema. Here’s a sample schema for the “movies” graph:

name: movies
schema:
  vertex_types:
    - type_name: Movie
      properties:
        - property_name: id
          property_type:
            primitive_type: DT_SIGNED_INT64
        - property_name: released
          property_type:
            primitive_type: DT_SIGNED_INT32
        - property_name: tagline
          property_type:
            primitive_type: DT_STRING
        - property_name: title
          property_type:
            primitive_type: DT_STRING
      primary_keys:
        - id
    - type_name: Person
      properties:
        - property_name: id
          property_type:
            primitive_type: DT_SIGNED_INT64
        - property_name: born
          property_type:
            primitive_type: DT_SIGNED_INT32
        - property_name: name
          property_type:
            primitive_type: DT_STRING
      primary_keys:
        - id
  edge_types:
    - type_name: ACTED_IN
      vertex_type_pair_relations:
        - source_vertex: Person
          destination_vertex: Movie
          relation: MANY_TO_MANY
    - type_name: DIRECTED
      vertex_type_pair_relations:
        - source_vertex: Person
          destination_vertex: Movie
          relation: MANY_TO_MANY
    - type_name: REVIEW
      vertex_type_pair_relations:
        - source_vertex: Person
          destination_vertex: Movie
          relation: MANY_TO_MANY
      properties:
        - property_name: rating
          property_type:
            primitive_type: DT_SIGNED_INT32
    - type_name: FOLLOWS
      vertex_type_pair_relations:
        - source_vertex: Person
          destination_vertex: Person
          relation: MANY_TO_MANY
    - type_name: WROTE
      vertex_type_pair_relations:
        - source_vertex: Person
          destination_vertex: Movie
          relation: MANY_TO_MANY
    - type_name: PRODUCED
      vertex_type_pair_relations:
        - source_vertex: Person
          destination_vertex: Movie
          relation: MANY_TO_MANY

Supported primitive data types for properties include:

  • DT_SIGNED_INT32

  • DT_UNSIGNED_INT32

  • DT_SIGNED_INT64

  • DT_UNSIGNED_INT64

  • DT_BOOL

  • DT_FLOAT

  • DT_DOUBLE

  • DT_STRING

  • DT_DATE32

For a comprehensive list of supported types, please refer to the data model page.

Step 2: Import Graph Data#

To import your data, utilize the import functionality of the administrative tool:

bin/gs_interactive database import -g movies -c examples/movies/import.yaml

The import.yaml file maps raw data fields to the schema of the “modern” graph created in Step 1. Here’s an illustrative example:

graph: movies
loading_config:
  data_source:
    scheme: file  # only file and odps is supported now
    location: /home/graphscope/movies/
  import_option: init # append, overwrite, only init is supported now
  format:
    type: csv
    metadata:
      delimiter: "|"  # other loading configuration places here
vertex_mappings:
  - type_name: Person  # must align with the schema
    inputs:
      - Person.csv
  - type_name: Movie
    inputs:
      - Movie.csv
edge_mappings:
  - type_triplet:
      edge: ACTED_IN
      source_vertex:  Person
      destination_vertex:  Movie
    inputs:
      - ACTED_IN.csv
  - type_triplet:
      edge: DIRECTED
      source_vertex:  Person
      destination_vertex:  Movie
    inputs:
      - DIRECTED.csv
  - type_triplet:
      edge: FOLLOWS
      source_vertex:  Person
      destination_vertex:  Person
    inputs:
      - FOLLOWS.csv
  - type_triplet:
      edge: PRODUCED
      source_vertex:  Person
      destination_vertex:  Movie
    inputs:
      - PRODUCED.csv
  - type_triplet:
      edge: REVIEW
      source_vertex:  Person
      destination_vertex:  Movie
    column_mappings:
      - column:
          index: 3
          name: rating
        property: rating
    inputs:
      - REVIEWED.csv
  - type_triplet:
      edge: WROTE
      source_vertex:  Person
      destination_vertex:  Movie
    inputs:
      - WROTE.csv

Note: The provided yaml file above offers a basic configuration for data importing. For a comprehensive understanding of data import configurations, please consult the data import page.

Step 3: Start the Service with the New Graph#

To start the service using the new graph, run:

bin/gs_interactive service start -g movies

Note: Stopping a prior service is necessary to start a new service with an alternative graph.

Now you can move to Stored Procedure to explore querying via stored procedures.

Try other graphs#

In addition to movies graph, we have also prepared the graph_algo graph. You can find the raw CSV files, graph.yaml, and import.yaml in the ./examples/graph_algo/ directory. You can import the graph_algo graph just like importing the movies graph. There are also some sample cypher queries, you can find them at GraphScope/flex/interactive/examples/graph_algo.