`
haoningabc
  • 浏览: 1446300 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

nebula graph踩坑(一)

阅读更多
git clone https://github.com/vesoft-inc/nebula.git
cd nebula/third-party



脚本全安装一遍
mkdir build
cd build
cmake ..
make 
make install 

/usr/local/nebula/scripts/nebula.service start all

/usr/local/nebula/scripts/nebula.service status all



客户端要单独装:
git clone https://github.com/vesoft-inc/nebula-console

yum install go

go version

make


--local_ip --meta_server_addrs 都改成本地ip

--local_ip=9.134.89.156
--meta_server_addrs=9.134.89.156:9559


存储文件在data下
配置在storage.conf 的 data_path


./nebula-console -addr 9.134.89.156 -port 9669 -u root -p nebula



show HOSTS;
ADD HOSTS 9.134.89.156:9779




https://discuss.nebula-graph.com.cn/t/topic/7788

show hosts graph
show hosts meta
show hosts

create space: https://docs.nebula-graph.com.cn/master/3.ngql-guide/9.space-statements/1.create-space/

CREATE SPACE IF NOT EXISTS my_space_1 (vid_type=FIXED_STRING(30));

SHOW SPACES;



##########
执行语句:

use my_space_1

show tags;

CREATE TAG IF NOT EXISTS player(name string, age int);

CREATE TAG IF NOT EXISTS no_property();
CREATE TAG IF NOT EXISTS player_with_default(name string, age int DEFAULT 20);

CREATE TAG IF NOT EXISTS woman(name string, age int, \
        married bool, salary double, create_time timestamp) \
        TTL_DURATION = 100, TTL_COL = "create_time";

drop tag no_property;


创建边:https://docs.nebula-graph.com.cn/3.0.1/3.ngql-guide/11.edge-type-statements/1.create-edge/

CREATE EDGE IF NOT EXISTS follow(degree int);

show edges;

CREATE EDGE IF NOT EXISTS no_property();

CREATE EDGE IF NOT EXISTS follow_with_default(degree int DEFAULT 20);

CREATE EDGE IF NOT EXISTS e1(p1 string, p2 int, p3 timestamp) \
        TTL_DURATION = 100, TTL_COL = "p2";




查询:

match(n:player) return n limit 2


desc tag player;
insert vertex player(name ,age) values "1":("haha",39)
insert vertex player(name ,age) values "2":("hehe",32)


delete vertex "1";
DELETE VERTEX "1" WITH EDGE;


##GO FROM "player100" OVER serve WHERE properties(edge).start_year == "2021" YIELD dst(edge) AS id | DELETE VERTEX $-.id;


边操作:
CREATE EDGE IF NOT EXISTS e1(); 


INSERT EDGE e1 () VALUES "10"->"11":();
desc edge e1;


CREATE EDGE IF NOT EXISTS e2 (name string, age int);


# 多次插入属性值。



INSERT EDGE e2 (name, age) VALUES "11"->"13":("n1", 12);
INSERT EDGE e2 (name, age) VALUES "11"->"13":("n1", 13);
INSERT EDGE e2 (name, age) VALUES "11"->"13":("n1", 14);


match(n:e2) return n limit 2


match 语句
https://docs.nebula-graph.com.cn/3.0.1/3.ngql-guide/7.general-query-statements/2.match/


CREATE TAG INDEX IF NOT EXISTS name ON player(name(20))
REBUILD TAG INDEX name;

CREATE TAG INDEX IF NOT EXISTS actorname ON actor(name(20))
REBUILD TAG INDEX actorname;

MATCH (v:player) \
        WHERE v.player.name == "haha" \
        RETURN v;


CREATE TAG actor (name string, age int);
INSERT VERTEX actor(name, age) VALUES "player100":("Tim Duncan", 42);

INSERT VERTEX actor(name, age) VALUES "1":("haha", 42);

insert vertex player(name ,age) values "1":("haha",39)
insert vertex player(name ,age) values "2":("hehe",32)
insert vertex player(name ,age) values "3":("Tim Duncan",32)

INSERT EDGE e2 (name, age) VALUES "1"->"2":("n1", 12);
INSERT EDGE e2 (name, age) VALUES "3"->"2":("n3", 32);
INSERT EDGE e1 () VALUES "1"->"3":();

INSERT EDGE e1 () VALUES "2"->"3":();
INSERT EDGE e1 () VALUES "3"->"2":();


UPDATE VERTEX ON player "1" SET name = "Tim Duncan"
UPDATE VERTEX ON player "3" SET name = "haohao"


MATCH (v:player:actor) \
        RETURN v \
        LIMIT 10;

MATCH (v:actor) RETURN v  LIMIT 10;

MATCH (v:player{name:"haha"}) RETURN v;


match (v:player) return v;

MATCH (v:player) \
        WHERE v.player.name == "haha" \
        RETURN v;

MATCH (v) WHERE id(v) == '1'  RETURN v;

MATCH (v:player) RETURN v;


MATCH (v:player { name: 'Tim Duncan' })--(v2) \
        WHERE id(v2) IN ["1", "2"] \
        RETURN v2;

MATCH (v:player{name:"hehe"})--(v2:player)  RETURN v2.player.name AS Name;

MATCH (v:player{name:"Tim Duncan"})-->(v2:player) RETURN v2.player.name AS Name;

MATCH (v:player{name:"Tim Duncan"})--(v2) \
        RETURN \
        CASE WHEN v2.team.name IS NOT NULL \
        THEN v2.team.name  \
        WHEN v2.player.name IS NOT NULL \
        THEN v2.player.name END AS Name;



MATCH (v:player{name:"Tim Duncan"})-->()<--(v3) \
        RETURN v3.player.name AS Name;


########匹配路径

MATCH p=(v:player{name:"Tim Duncan"})-->(v2) \
        RETURN p;

MATCH p=(v:player{name:"haohao"})-->(v2) RETURN p;


###### 匹配边:
MATCH ()<-[e]-() RETURN e  LIMIT 3;

MATCH ()<-[e]-() RETURN e  LIMIT 5;

MATCH ()-[e:e2]->() RETURN e limit 3;


######## 匹配边的属性:
MATCH (v:player{name:"haohao"})-[e:e2{age:32}]->(v2) RETURN e;


###### 查多个边
MATCH (v:player{name:"Tim Duncan"})-[e:e2|:e1]->(v2)  RETURN e;


###### 匹配多条边

MATCH (v:player{name:"Tim Duncan"})-[]->(v2)<-[]-(v3) RETURN v2, v3;
MATCH (v:player{name:"Tim Duncan"})-[p1]->(v2)<-[p2:e2]-(v3) RETURN v2,p1,p2,v3;


###### 匹配定长路径

一跳
MATCH p=(v:player{name:"Tim Duncan"})-[e:e2*1]->(v2) RETURN DISTINCT v2 AS Friends;
两跳
MATCH p=(v:player{name:"Tim Duncan"})-[e:e2*2]-(v2) RETURN DISTINCT v2 AS Friends;

如果hop为 0,模式会匹配路径上的起始点。

MATCH (v:player{name:"Tim Duncan"}) -[*0]-> (v2) RETURN v2;


MATCH p=(v:player{name:"Tim Duncan"})-[e:e1*2]->(v2)   RETURN v2 AS Friends;


MATCH p=(v:player{name:"Tim Duncan"})-[e:e1]-()-[e:e2]->(v2)   RETURN v2 AS Friends;

MATCH p=(v:player{name:"Tim Duncan"})-[e:e1]-()-[h:e2]->(v2)   RETURN v2 AS Friends;

用户可以使用DISTINCT关键字聚合重复结果

MATCH p=(v:player{name:"Tim Duncan"})-[e:e1*1..3]->(v2:player) RETURN DISTINCT v2 AS Friends, count(v2);
MATCH p=(v:player{name:"Tim Duncan"})-[e:e1*1..3]->(v2:player) RETURN  v2 AS Friends;

匹配多个 Edge type 的变长路径:
MATCH p=(v:player{name:"Tim Duncan"})-[e:e2|e1*2]->(v2)         RETURN v2
MATCH p=(v:player{name:"Tim Duncan"})-[e:e2|e1*2]->(v2)         RETURN DISTINCT v2

匹配多个模式
MATCH (v1:player{name:"Tim Duncan"}), (v2:actor{name:"haha"})         RETURN v1,v2

多MATCH检索:


####### lookup
MATCH (v:player) WHERE v.player.name == "haohao" RETURN v;

LOOKUP ON player WHERE player.name == "haohao" YIELD id(vertex);

LOOKUP ON player WHERE player.age  > 30  YIELD id(vertex);





############
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics