OushuDB 用户指南图算法之GQL脚本命令

OushuDB 用户指南图算法之GQL脚本命令
文章图片

创建VERTEX LABEL:
CREATE VERTEX person (code text, name text, age int, PRIMARY KEY(code)); CREATE VERTEX card (code text, PRIMARY KEY(code));
创建EDGE LABEL:
CREATE EDGE owns (from person, to card); CREATE EDGE translate (from card, to card, id text, amount int, DISCRIMINATOR(id));
【OushuDB 用户指南图算法之GQL脚本命令】创建图:
创建图的时候可以指定不同存储类型的图,目前支持的类型有magmaap,orc,创建的语法如下:
CREATE GRAPH graphname(vertex(person, card), edge(owns, translate))format 'magmaap'; CREATE GRAPH graphname(vertex(person, card), edge(owns, translate))format 'orc';
创建图的时候默认是不创建主键的索引的,如果需要创建图的时候根据点和边的主键创建唯一索引,可以用如下语句:
CREATE GRAPH graphname(vertex(person, card), edge(owns, translate))format 'magmaap' with(primaryindex=false);
注:orc格式的图不支持唯一索引
创建index
可以对图中任一类型的点或边创建索引,创建vertex index语法如下:
CREATE INDEX indexname ON graphname.person (age); CREATE UNIQUE indexname INDEX ON graphname.person (code);
创建edge index时,可以任意选择edge的属性和源点、目标点的主键,源点和目标点的主键用 FROM 和 TO 表示:
CREATE INDEX indexname ON graphname.translate (FROM, TO, id);
这样索引有三列,(src_person.code, dst_person.code, id)
也可以建立反转edge的index,如
CREATE INDEX indexname ON graphname.translate (TO, FROM, id);
该语句的索引列为 (dst_person.code, src_person.code, id)
注:创建UNIQUE INDEX时必须向左包含primary key/DISCRIMINATOR。如给person创建UNIQUE INDEX,则必须包含code,且code在最左边。
插入数据
INSERT INTO graphname.person VALUES('1234567', '小李', 24); INSERT INTO graphname.person VALUES('2345678', '小王', 25); INSERT INTO graphname.card VALUES('6666666'); INSERT INTO graphname.card VALUES('7777777'); INSERT INTO graphname.owns VALUES('1234567', '6666666'); INSERT INTO graphname.owns VALUES('2345678', '7777777'); INSERT INTO graphname.translate VALUES('6666666', '7777777','t123', 10000);
查询数据
单独查询vertex:
SELECT * FROM graphname.person;
单独查询edge:
SELECT * FROM graphname.translate
根据一条edge查询vertex的信息:
SELECT FROM (SELECT FROM graphname.translate WHERE id='t123')AS t1 INNER JOIN graphname.owns ON t1.src_code=graphname.owns.dst_code OR t1.dst_code=graphname.owns.dst_code INNER JOIN graphname.person ON graphname.owns.src_code=graphname.person.code;
删除graph
创建出的图、点、边、索引均可以drop
DROP GRAPH graphname; DROP VERTEX person; DROP VERTEX card; DROP EDGE owns; DROP EDGE translate; DROP INDEX indexname;

    推荐阅读