Skip to content

Latest commit

 

History

History
472 lines (326 loc) · 12 KB

1.get-started.md

File metadata and controls

472 lines (326 loc) · 12 KB

快速入门

本手册将逐步指导您使用 Nebula Graph。我们将指导您如何创建并使用图空间定义数据的schema插入数据获取数据更新数据以及删除数据。最后我们将指导您如何通过.ngql文件来批量插入数据。

概述

我们将通过下图中不同点之间的关系向您展示如何使用 Nebula Graph 数据库。

image

上图中有两个标签(playerteam)以及两条边类型(servefollow)。

创建并使用图空间

Nebula Graph 中的图空间类似于传统数据库中创建的独立数据库,例如在 MySQL 中创建的数据库。首先,您需要创建一个图空间并使用它,然后才能执行其他操作。

您可以通过以下步骤创建并使用图空间:

  1. 输入以下语句创建图空间:
nebula> CREATE SPACE nba(partition_num=10, replica_factor=1);

注意

  • partition_num:指定一个副本中的分区数。
  • replica_factor:指定集群中副本的数量。
  1. 输入以下语句使用图空间:
nebula> USE nba;

现在,您可以通过以下语句查看刚创建的空间:

nebula> SHOW SPACES;

返回以下信息:

========
| Name |
========
| nba  |
--------

定义数据的Schema

Nebula Graph 中,我们将具有相同属性的点分为一组,该组即为一个标签。CREATE TAG 语句定义了一个标签,标签名称后面的括号中是标签的属性和属性类型。CREATE EDGE 语句定义边类型,类型名称后面的括号中是边的属性和属性类型。

您可以通过以下步骤创建标签和边类型:

  1. 输入以下语句创建 player 标签:
nebula> CREATE TAG player (name string, age int);
  1. 输入以下语句创建 team 标签:
nebula> CREATE TAG team (name string);
  1. 输入以下语句创建 follow 边类型:
nebula> CREATE EDGE follow(degree int);
  1. 输入以下语句创建 serve 边类型:
nebula> CREATE EDGE serve(start_year int, end_year int);

现在,您可以查看刚刚创建的标签和边类型。

要获取刚创建的标签,请输入以下语句:

nebula> SHOW TAGS;

返回以下信息:

============
| Name     |
============
| player   |
------------
| team     |
------------

要显示刚创建的边类型,请输入以下语句:

nebula> SHOW EDGES;

返回以下信息:

==========
| Name   |
==========
| serve  |
----------
| follow |
----------

要显示 player 标签的属性,请输入以下语句:

nebula> DESCRIBE TAG player;

返回以下信息:

===================
| Field  | Type   |
===================
| name   | string |
-------------------
| age    | int    |
-------------------

要获取 follow 边类型的属性,请输入以下语句:

nebula> DESCRIBE EDGE follow;

返回以下信息:

=====================
| Field    | Type   |
=====================
| degree   | int    |
---------------------

插入数据

您可以根据示意图中的关系插入点和边数据。

插入点

INSERT VERTEX 语句通过指定点的标签、属性、点 ID 和属性值来插入一个点。

您可以通过以下语句插入点:

nebula> INSERT VERTEX player(name, age) VALUES 100:("Tim Duncan", 42);
nebula> INSERT VERTEX player(name, age) VALUES 101:("Tony Parker", 36);
nebula> INSERT VERTEX player(name, age) VALUES 102:("LaMarcus Aldridge", 33);
nebula> INSERT VERTEX team(name) VALUES 200:("Warriors");
nebula> INSERT VERTEX team(name) VALUES 201:("Nuggets");
nebula> INSERT VERTEX player(name, age) VALUES 121:("Useless", 60);

注意

  1. 在上面插入的点中,关键词 VALUES 之后的数字是点的ID(缩写为 VID)。图空间中的 VID 必须是唯一的。

  2. 最后插入的点将在删除数据部分中删除。

  3. 如果您想一次插入多个同类型的点,可以执行以下语句:

nebula> INSERT VERTEX player(name, age) VALUES 100:("Tim Duncan", 42), \
101:("Tony Parker", 36), 102:("LaMarcus Aldridge", 33);

插入边

INSERT EDGE 语句通过指定边类型名称、属性、起始点ID和目标点ID以及属性值来插入边。

您可以通过以下语句插入边:

nebula> INSERT EDGE follow(degree) VALUES 100 -> 101:(95);
nebula> INSERT EDGE follow(degree) VALUES 100 -> 102:(90);
nebula> INSERT EDGE follow(degree) VALUES 102 -> 101:(75);
nebula> INSERT EDGE serve(start_year, end_year) VALUES 100 -> 200:(1997, 2016);
nebula> INSERT EDGE serve(start_year, end_year) VALUES 101 -> 201:(1999, 2018);

注意:如果您想一次插入多条同类型的边,可以执行以下语句:

INSERT EDGE follow(degree) VALUES 100 -> 101:(95),100 -> 102:(90),102 -> 101:(75);

获取数据

Nebula Graph 中插入数据后,您可以从图空间中检索到插入的数据。

FETCH PROP ON 语句从图空间检索数据。如果要获取点数据,则必须指定点标签和点ID;如果要获取边数据,则必须指定边类型名称、起始点 ID 和目标点 ID。

要获取 VID100 的选手的数据,请输入以下语句:

nebula> FETCH PROP ON player 100;

返回以下信息:

============================
| player.name | player.age |
============================
| Tim         | 42         |
----------------------------

要获取 VID 100VID 200之间的 serve 边的数据,请输入以下语句:

nebula>FETCH PROP ON serve 100 -> 200;

返回以下信息:

=====================================
| serve.start_year | serve.end_year |
=====================================
| 1997             | 2016           |
-------------------------------------

更新数据

您可以更新刚插入的点和边数据。

更新点数据

UPDATE VERTEX 语句首先选择要更新的点,然后通过在等号右侧为其分配新值来更新点的数据。

以下示例说明如何将 VID 100name 值从 Tim Duncan 更改为 Tim

输入以下语句更新 name 值:

nebula> UPDATE VERTEX 100 SET player.name = "Tim";

要检查 name 值是否已更新,请输入以下语句:

nebula> FETCH PROP ON player 100;

返回以下信息:

============================
| player.name | player.age |
============================
| Tim         | 41         |
----------------------------

更新边数据

UPDATE EDGE 语句通过指定边的起始点ID和目标点ID,然后在等号右侧为其分配新值来更新边的数据。

以下示例展示了如何更改 VID 100VID 101 之间 follow 边的值。现在,我们将 degree 的值从 95 更改为 96

输入以下语句更新 degree 的值:

nebula> UPDATE EDGE 100 -> 101 OF follow SET degree = follow.degree + 1;

要检查 degree 的值是否已更新,请输入以下语句:

nebula> FETCH PROP ON follow 100 -> 101;

返回以下信息:

=================
| follow.degree |
=================
| 96            |
-----------------

删除数据

如果您有不需要的点或边数据,则可以从图空间中将其删除。

删除点

您可以从图空间中删除任何点。DELETE VERTEX 语句通过指定点ID来删除点。

要删除 VID121 的点,请输入以下语句:

nebula> DELETE VERTEX 121;

要检查是否删除了该点,请输入以下语句;

nebula> FETCH PROP ON player 121;

返回以下信息:

Execution succeeded (Time spent: 1571/1910 us)

注意:上面返回结果为空的信息表示查询操作成功,但是由于数据已被删除,因此未能从图空间中查询到任何数据。

删除边

您可以从图空间中删除任何边。DELETE EDGE 语句通过指定边类型名称以及起始点ID和目标点ID来删除边。

要删除 VID 100VID 200 之间的 follow 边,请输入以下语句:

nebula> DELETE EDGE follow 100 -> 200;

注意:如果您删除了一个点,则该点所有的入边和出边都将被删除。

查询示例

本节提供了更多查询示例供您参考。

示例一: 查询 VID 100 关注的点。

输入以下语句:

nebula> GO FROM 100 OVER follow;

返回以下信息:

===============
| follow._dst |
===============
| 101         |
---------------
| 102         |
---------------

示例二: 查询 VID 100 关注的点且该点年龄大于 35 岁。 返回其姓名和年龄并分别把列的名称设置为 TeammateAge

输入以下语句:

nebula> GO FROM 100 OVER follow WHERE $$.player.age >= 35 \  
YIELD $$.player.name AS Teammate, $$.player.age AS Age;

返回以下信息:

=====================
| Teammate    | Age |
=====================
| Tony Parker | 36  |
---------------------

注意

  • YIELD 指定您希望从查询中返回的值或结果。
  • $$ 表示目的点。
  • \ 表示换行符。

示例三: 查询球员 100 关注的球员所效力的球队。

有两种方法可获得相同的结果。首先,我们可以使用管道来检索球队。然后,我们使用临时变量来检索同一支球队。

输入带管道的语句:

nebula> GO FROM 100 OVER follow YIELD follow._dst AS id | \  
GO FROM $-.id OVER serve YIELD $$.team.name \
AS Team, $^.player.name AS Player;

返回如下信息:

===============================
| Team    | Player            |
===============================
| Nuggets | Tony Parker       |
-------------------------------

输入带临时变量的语句:

nebula> $var=GO FROM 100 OVER follow YIELD follow._dst AS id; \  
GO FROM $var.id OVER serve YIELD $$.team.name \
AS Team, $^.player.name AS Player;

返回以下信息:

===============================
| Team    | Player            |
===============================
| Nuggets | Tony Parker       |
-------------------------------

注意

  • $^ 表示起始点。
  • | 表示管道。上一个查询的输出作为下一个查询的输入。
  • $- 表示输入流。
  • 第二种方法采用用户自定义的变量 $var。该变量的范围仅在复合语句内。

批量插入

要插入多条数据,可以将所有 DDL(数据定义语言)语句放入 .ngql 文件中,如下所示。

CREATE SPACE nba(partition_num=10, replica_factor=1);
USE nba;
CREATE TAG player(name string, age int);
CREATE TAG team(name string);
CREATE EDGE follow(degree int);
CREATE EDGE serve(start_year int, end_year int);
  • 如果您是通过编译源代码来安装 Nebula Graph,则可以通过以下命令批量写入console:
$ cat schema.ngql | ./bin/nebula -u user -p password
  • 如果您通过 docker-compose 来使用 Nebula Graph,则可以通过以下命令批量写入console:
$ cat nba.ngql | sudo docker run --rm -i --network=host \  
vesoft/nebula-console:nightly --addr=127.0.0.1 --port=3699

注意

  • 您必须将IP地址和端口号更改为您自己的IP地址和端口号。
  • 您可以下在这里nba.ngql 文件。

同样,您可以在 data.ngql 文件中放置数百或数千个 DML(数据操作语言)语句来插入数据。如果您要插入数百万条记录,建议使用 csv 导入工具(或 sst 提取工具)。