本文介绍管理数据库中图的语句。
显示图
使用语句SHOW GRAPH
获取数据库中所有图的信息。
SHOW GRAPH
图的信息呈现在_graph
,_graph_shard_1
,_graph_shard_2
等表中:
- 表
_graph
包含数据库中的所有图。 - 表
_graph_shard_<N>
包含存储在分片<N>
上的图。
表中各字段提供了各图的基础信息:
字段 |
描述 |
---|---|
id |
图的唯一ID |
name |
图的唯一名称 |
total_nodes |
图中总点数。仅在_graph 表中出现 |
total_edges |
图中总边数。仅在_graph 表中出现 |
description |
对图的描述 |
status |
图的当前状态,包括NORMAL 、LOADING_SNAPSHOT 、CREATING 、DROPPING 和SCALING |
shards |
图数据分布的分片ID |
partition_by |
计算分片键哈希值的函数,对图数据分片至关重要 |
meta_version |
Meta服务器使用的版本号,用于和shard服务器同步图上的DDL(数据定义语言)操作 |
创建图
使用语句CREATE GRAPH
在数据库中创建新图。
<create graph statement> ::=
"CREATE GRAPH" <graph name> <graph structure> <graph sharding> <graph description>
<graph structure> ::=
"{" [ <element schemas> ] "}"
<element schemas> ::=
<element schema> [ { "," <element schema> }... ]
<element schema> ::=
<node schema> | <edge schema>
<node schema> ::=
"NODE" [ "TYPE" ] <node schema name> "(" <property types> ")"
<edge schema> ::=
"EDGE" [ "TYPE" ] <edge schema name> "()-[" <property types> "]->()"
<property types> ::=
"{" <property type> [ { "," <property type> }... ] "}"
<property type> ::=
<property name> <property value type>
<graph sharding> ::=
"PARTITION BY" <hash function> "SHARDS" <shard id list>
<graph description> ::=
"COMMENTS" <description string>
创建图时,可指定四个部分:
部分 |
描述 |
---|---|
<graph name> |
图的唯一名称。请参阅命名规范 |
<graph structure> |
图结构,用来定义图的<node schema> 和<edge schema> (二者统称为<element schema> )。可使用空的{} 省略该部分每个 <element schema> 包括: |
<graph sharding> |
图的分片策略,包括: |
<graph description> |
可选,图描述 |
注意:一个名为
<schema name>
的点、边schema的标签集合为:<schema name>
。
根据以下要求创建图g1
:
- 点schema:
User
和Club
- 边schema:
Follows
和Joins
- 分片:使用哈希函数
Crc32
将数据分发至分片1
、2
和3
中
CREATE GRAPH g1 {
NODE User ({name string, gender string} ),
NODE Club ({name string, since uint32}),
EDGE Follows ()-[{createdOn datetime}]->(),
EDGE Joins ()-[{memberNo uint64}]->()
} PARTITION BY HASH(Crc32) SHARDS [1,2,3] COMMENT 'My first graph'
创建仅包含点schema和边schema的图g2
:
CREATE GRAPH g2 {
NODE User (),
NODE Club (),
EDGE Joins ()-[{}]->()
} PARTITION BY HASH(Crc32) SHARDS [1,2]
创建图结构为空的图g3
,使用哈希函数CityHash64
将数据分发至分片1
中:
CREATE GRAPH g3 {} PARTITION BY HASH(CityHash64) SHARDS [1]
创建两个图:
CREATE GRAPH g1 {
NODE User ({name string, gender string}),
NODE Club ({name string, since uint32}),
EDGE Follows ({createdOn datetime}),
EDGE Joins ({memberNo uint64})
} PARTITION BY HASH(Crc32) SHARDS [1,2,3] COMMENT 'My first graph'
CREATE GRAPH g2 {} PARTITION BY HASH(CityHash64) SHARDS [1]
删除图
使用语句DROP GRAPH
从数据库中删除图。
<drop graph statement> ::=
"DROP GRAPH" <graph name>
删除图g1
:
DROP GRAPH g1
删除两个图:
DROP GRAPH g1
DROP GRAPH g2
向图添加schema
使用语句ALTER GRAPH
可以将点schema和边schema添加到图中。
<alter graph statement> ::=
"ALTER GRAPH" <graph name> <add element schemas>
<add element schemas> ::=
<add node schemas> | <add edge schemas>
<add node schemas> ::=
"ADD NODE" "{" <add node schema> [ { "," <add node schema> }... ] "}"
<add node schema> ::=
<node schema name> "(" <property types> ")"
<add edge schemas> ::=
"ADD EDGE" "{" <add edge schema> [ { "," <add edge schema> }... ] "}"
<add edge schema> ::=
<edge schema name> "(" <property types> ")"
详情
将Book
和 Company
两个点schema添加到图g1
中:
ALTER GRAPH g1 ADD NODE {Book ({title string, rating float}), Company ({name string})}
将名为Rates
的边schema添加到图g1
中:
ALTER GRAPH g1 ADD EDGE {Rates ({value float})}
从图中删除schema
使用ALTER GRAPH
语句可以从图中删除点schema和边schema。删除点schema或边schema意味着同时将其中的所有点或边从数据库删除。需请留意,删除点时,所有与其相连的边也会删除。两个默认的schema无法删除。
Schema删除操作以作业形式进行,稍后可使用SHOW JOB
确认删除操作是否完成。
<alter graph statement> ::=
"ALTER GRAPH" <graph name> <drop element schemas>
<drop element schemas> ::=
<drop node schemas> | <drop edge schemas>
<drop node schemas> ::=
"DROP NODE" <node schema name> [ { "," <node schema name> }... ]
<drop edge schemas> ::=
"DROP EDGE" <edge schema name> [ { "," <edge schema name> }... ]
从图g1
中删除名为User
的点schema:
ALTER GRAPH g1 DROP NODE User
从图g1
删除Follows
和Joins
两个边schema:
ALTER GRAPH g1 DROP EDGE Follows, Joins