Nebula Graph查询语言(nGQL)(一)

(一)、概念        

        nGQL是Nebula Graph使用的的声明式图查询语言,支持灵活高效的图模式,而且nGQL是为开发和运维人员设计的类SQL查询语言,易于学习。

exp:CREATE TAG player(name string, age int);

       ps:正确使用索引可以加速查询,但是索引会导致写性能下降90%甚至更多,只有在根据点或边的属性定位点或边时才使用索引。

        模式(pattern):

                1.1、单点模式

                        exp:(a)

                1.2、多点关联模式

                        exp:(a) - [] -> (b) <- [] -(c)

                        ps: 只有在涉及某个点时,才需要命名这个点。如果不涉及这个点,则可以省略名称

                        (a)-[]->()<-[]-(c)

                1.3、标签模式

                        (a:User:Admin)-[]->(b)

                1.4、属性模式

                        (a {name: 'Andres', sport: 'Brazilian Ju-Jitsu'})

                        (a)-[{blocked: false}]->(b)

               1.5、边模式

                        (a)-[]-(b)

                        (a)-[r]->(b)

                        (a)-[r:REL_TYPE]->(b)        

                        (a)-[r:TYPE1|TYPE2]->(b)

                        (a)-[:REL_TYPE]->(b)

                1.6、变长模式

                        (a)-[*2]->(b)    ==      (a)-[]->()-[]->(b)

                        (a)-[*3..5]->(b)    

                1.7、路径变量

                        p = (a)-[*3..5]->(b)

(二)数值类型

        1、int                  [-9223372036854775808, 9223372036854775807]

        2、double  

(三)布尔

      bool  true / false

(四)字符串

         1、定长字符串

                CREATE TAG t1 (p1 fixed_string(10));

        2、变长字符串

                CREATE TAG t2 (p2 string);

        3、转义字符串

                "\n\t\r\b\f"

    4、字符串中的单引号和双引号都支持

       YIELD '' AS quote1, "" AS quote2, "'" AS quote3, '"' AS quote4

(五)日期和时间类型

        DATETIMEDATETIMETIMESTAMP

        1、DATE(YYYY-MM-DD)

        2、TIME(hh:mm:ss.ususus)

        3、DATETIME(YYYY-MM-DDThh:mm:ss.ususus)

        4、TIMESTAMP()

        exp:

                CREATE TAG date1(p1 date, p2 time, p3 datetime);

                INSERT VERTEX date1(p1, p2, p3) VALUES "test1":(date("2021-03-17"), time("17:53:59"), datetime("2021-03-17T17:53:59"));
                CREATE TAG school(name string , found_time timestamp);

                INSERT VERTEX school(name, found_time) VALUES "DUT":("DUT", 573206400);

                INSERT VERTEX school(name, found_time) VALUES "DUT":("DUT", timestamp("1988-03-01T08:00:00"));

                INSERT VERTEX school(name, found_time) VALUES "dut":("dut", now());
                WITH time({hour: 12, minute: 31, second: 14}) AS d RETURN d;

                WITH date({year: 1984, month: 10, day: 11}) AS x RETURN x + 1

(六)NULL

        默认情况下,插入点或边时,属性值可以为NULL,用户也可以设置属性值不允许为NULLNOT NULL),即插入点或边时必须设置该属性的值,除非创建属性时已经设置默认值。

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

        SHOW CREATE TAG player;

        INSERT VERTEX player(name, age) VALUES "Kobe":("Kobe",null);

         FETCH PROP ON player "Kobe";

(七)列表

        列表(List)是复合数据类型,一个列表是一组元素的序列,可以通过元素在序列中的位置访问列表中的元素。

        RETURN [1, 2, 3] AS List; 

        RETURN range(1,5)[3];

        RETURN range(1,5)[-2];

        RETURN [n IN range(1,5) WHERE n > 2] AS a

        RETURN [n IN range(1,5) WHERE n > 2 | n + 10] AS a;

        RETURN [n IN range(1,5) | n + 10] AS a;

        RETURN tail([n IN range(1, 5) | 2 * n - 10]) AS a;

        RETURN size([1,2,3]);

        GO FROM "player100" OVER follow WHERE follow.degree NOT IN [x IN [92, 90] | x + $$.player.age]  YIELD follow._dst AS id, follow.degree AS degree;

        MATCH p = (n:player{name:"Tim Duncan"})-[:follow]->(m) RETURN [n IN nodes(p) | n.age + 100] AS r;

(八)集合

        集合(Set)是复合数据类型。

(九)映射

        映射(Map)是复合数据类型。一个映射是一组键值对(Key-Value)的无序集合。在映射中,Key是字符串类型,Value可以是任何数据类型。用户可以通过map['<key>']的方法获取映射中的元素。

        YIELD {key: 'Value', listKey: [{inner: 'Map1'}, {inner: 'Map2'}]}

(十)类型转换

        UNWIND [true, false, 'true', 'false', NULL] AS b RETURN toBoolean(b) AS b;

        RETURN toFloat(1), toFloat('1.3'), toFloat('1e3'), toFloat('not a number');

        RETURN toInteger(1), toInteger('1'), toInteger('1e3'), toInteger('not a number');

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小_长颈鹿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值