UltipaDocs
Products
Solutions
Resources
Company
Start Free Trial
UltipaDocs
Start Free Trial
  • Introduction
  • GQL vs Other Languages
    • Overview
    • Node and Edge Patterns
    • Path Patterns
    • Quantified Paths
    • Questioned Paths
    • Shortest Paths
    • Cheapest Paths
    • K-Hop Traversal
    • Graph Patterns
    • Overview
    • Open Graphs
    • Closed Graphs
    • Graphs with Edge ID
    • Graph Types
    • Constraints
    • Projections
    • Storage Maintenance
    • Unique Identifiers
    • INSERT
    • INSERT OVERWRITE
    • UPSERT
    • MERGE
    • SET
    • REMOVE
    • DELETE
    • FOREACH
    • Query Composition
    • Result Table and Visualization
    • MATCH
    • OPTIONAL MATCH
    • FILTER
    • LET
    • FOR
    • ORDER BY
    • LIMIT
    • SKIP
    • CALL
    • RETURN
    • Composite Query
    • NEXT
    • All Functions
    • Element Functions
    • Path Functions
    • Aggregate Functions
    • Mathematical Functions
    • Trigonometric Functions
    • String Functions
    • List Functions
    • Datetime Functions
    • Spatial Functions
    • Null Functions
    • Utility Functions
    • Type Conversion Functions
    • Table Functions
    • Database Functions
  • Operators
  • Predicates
    • CASE
    • LET Value Expression
    • Value Query Expression
    • List Expressions
    • Index
    • Full-text Index
    • Vector Index
  • Transactions
  • Triggers
  • Query Management
  • Execution Plan
  • Backup and Restore
    • Variables
    • Values and Types
    • Comments
    • Reserved Words
    • Naming Conventions
    • Syntactic Notation
  • GQL Conformance
  1. Docs
  2. /
  3. ISO GQL
  4. /
  5. Graph Management

Graph Types

Overview

A graph type is a reusable schema definition — a list of node types and edge types — that one or more graphs can be instantiated from. Graph types let multiple graphs share the same shape without redeclaring the schema each time.

Graph types are independent objects: dropping a graph type does not affect graphs that were created from it, and conversely.

Showing Graph Types

Show graph types stored in the database:

GQL
SHOW GRAPH TYPES

To inspect a single graph type:

GQL
DESCRIBE GRAPH TYPE socialType

-- DESC is a shorthand for DESCRIBE
DESC GRAPH TYPE socialType

Each graph type provides the following essential metadata:

FieldDescription
nameThe unique name assigned to the graph type.
node_type_countNumber of node types.
edge_type_countNumber of edge types.
node_typesComma-separated list of node type names.
edge_typesComma-separated list of edge type names.
definitionThe type definitions.
bound_graphsGraphs that use this graph type.
commentThe comment of the graph type.
created_atCreation time.
updated_atLast update time.

Creating Graph Types

Inline Specification

Create an empty graph type that schema can be added to later:

GQL
CREATE GRAPH TYPE socialType

Create a graph type with an inline specification:

GQL
CREATE GRAPH TYPE gType {
  NODE User ({name STRING, age UINT32}),
  NODE Club ({name STRING}),
  EDGE FOLLOWS ()-[{createdOn TIMESTAMP}]->(),
  EDGE JOINS ()-[]->()
}

Copying a Graph Type

Create a graph type that is a copy of another graph type:

GQL
CREATE GRAPH TYPE socialType AS COPY OF gType

Inferring a Graph Type

Create a graph type by inferring the schema from an existing graph (the right-hand side is a graph name, not a graph type name). The system reads the labels and properties present in the graph and produces a matching type:

GQL
CREATE GRAPH TYPE inferredType LIKE myGraph

When myGraph is an open graph, the inferred type captures only what has actually been inserted — labels seen, and the union of property names and types observed for each label.

Using IF NOT EXISTS

You can use the IF NOT EXISTS clause to prevent errors when attempting to create a graph type that already exists. It allows the statement to be safely executed.

GQL
CREATE GRAPH TYPE IF NOT EXISTS socialType {
  NODE Person ({name STRING, email STRING})
}

Using REPLACE

You can use OR REPLACE to drop the existing graph type with the same name and create a new one in its place:

GQL
CREATE OR REPLACE GRAPH TYPE socialType {
  NODE Person ({name STRING, email STRING})
}

Adding Node/Edge Types

Add node and edge types to a graph type:

GQL
-- Add node type Organization to socialType
ALTER GRAPH TYPE socialType ADD NODE Organization ({name STRING})

-- Add edge type WorksAt to socialType
ALTER GRAPH TYPE socialType ADD EDGE WorksAt (:Person)-[{since DATE}]->(:Organization)

Dropping Node/Edge Types

Drop node and edge types from a graph type:

GQL
-- Drop node type Organization from socialType
ALTER GRAPH TYPE socialType DROP NODE Organization

-- Drop edge type WorksAt from socialType
ALTER GRAPH TYPE socialType DROP EDGE IF EXISTS WorksAt

Renaming Graph Types

Rename socialType to communityType:

GQL
ALTER GRAPH TYPE socialType RENAME TO communityType

Commenting Graph Types

Set comment for communityType:

GQL
ALTER GRAPH TYPE communityType COMMENT 'Schema for social-network graphs'

Dropping Graph Types

Drop the graph type socialType:

GQL
DROP GRAPH TYPE socialType

The IF EXISTS clause is used to prevent errors when attempting to delete a graph type that does not exist. It allows the statement to be safely executed.

GQL
DROP GRAPH TYPE IF EXISTS socialType

Dropping a graph type does not affect graphs that were already instantiated from it.

Instantiating Closed Graphs

Create a graph using a named graph type, see Named Graph Type. The instantiatized graph is a closed graph: inserts must conform to one of the node or edge types defined by the referenced graph type.

NOTE

The link between a closed graph and its graph type is established only at instantiation time where the schema is copied from the type into the graph. After that, the two are independent: subsequent ALTER GRAPH TYPE changes do not propagate to graphs already created from it, and the bound graph can independently ALTER GRAPH ... ADD/DROP NODE/EDGE to evolve its own schema without affecting the type.