修改图模型

创建图模型,可以对其进行修改。 已经存储在图中的数据,如果不涉及到该修改动作,则会保持不变。 例如,如果你有100个Book顶点,然后向Book模式添加了一个属性,那么你仍然会有100个Book顶点,但属性值会从默认值变为新设定的值。 如果你删除了某个Book的属性,那么您仍然拥有所有Book,但是那个属性将会消失。

要安全地更新图形数据库纲目,用户应遵循以下过程:

  • 创建SCHEMA_CHANGE JOB,它定义ADD,ALTER和/或DROP语句的顺序。

  • 运行SCHEMA_CHANGE JOB(即RUN JOB job_name),它将执行以下操作:

    • 尝试更改图形数据库Schema

    • 如果更改成功,则任何与新图形数据库Schema不兼容的任何加载作业或查询失效。

    • 如果更改失败,则报告错误并返回到尝试更改之前的状态。

对Schema未更改部分的作业和查询仍然有效,不需要重新开始。 但是,即使这些作业有效(例如它可以运行),用户也可能仍然需要检测它们是否真的运行完美。(例如,你想运行它们吗?)

全局Schema改动 vs. 局部Schema改动

只有超级用户才能添加,更改或删除全局顶点类或全局边类,这些类通过CREATE VERTEX或CREATE ... EDGE创建。 即使顶点类或边类仅用于一个图,此规则也适用。超级用户可以使用GLOBAL SCHEMA_CHANGE JOB执行这种更改操作。

管理员或设计者可以添加,更改或删除在局部图中创建的局部顶点类或局部边类。 使用SCHEMA_CHANGE JOB内的ADD语句创建局部顶点类和边类。 要更改或删除任何这些局部类,管理员用户可以使用常规命令SCHEMA_CHANGE JOB。

下面描述了两种类型的操作。

创建图数据库Schema_Change JOB

下例中的CREATE SCHEMA_CHANGE JOB代码块定义了ADD、ALTER和DROP的顺序,用于对指定图的更改。但是它并不改动图数据库Schema。

CREATE SCHEMA_CHANGE JOB的一个用途是将另一个顶点类型和边类型定义为二级索引的结构。 例如,如果要索引User顶点的postalCode属性,则可以创建postalCode_idx(PRIMARY_ID id字符串,代码字符串)顶点类型和hasPostalCode(FROM User,TO postalCode_idx)边缘类型。 然后创建一个索引结构,每个User都有一条边到postalCode_idx顶点。

添加顶点和边(局部)

ADD语句用于定义新的顶点类或边类,并自动将其添加到图数据库Schema中。 ADD VERTEX | EDGE的语法类似于CREATE VERTEX | EDGE | GRAPH的语法,但它只能在SCHEMA_CHANGE JOB中使用。

修改顶点和边

ALTER语句用于在已有的顶点类或边类中添加或删除属性。它只能在SCHEMA_CHANGE JOB中使用。基本语法如下:

修改 ... 添加

新添加的属性被附加到到图数据库Schema的最后,新属性可以包括DEFAULT 字段:

修改... 删除

删除顶点或边(局部)

DROP语句会从数据库字典中删除指定的顶点类或边类。仅当没有正在执行的图操作时DROP语句才能使用:

运行Schema_CHANGE JOB

命令RUN JOB job_name执行图数据库Schema更改操作。 更改框架后,GSQL系统会检查所有现有的GSQL查询(详见“GSQL语言参考,第2部分:查询”)。 如果现有的GSQL查询涉及到已被删除的顶点,边或属性,则该查询将失效,并提示“图数据库Schema更新后查询query_name变为无效,请更新。”("Query query_name becomes invalid after schema update, please update it.")

下面的例子中,SCHEMA_CHANGE JOB add_reviews分别添加了Review顶点类和两种边类,以便分别使Review可以将User和Book连接起来:

USE GLOBAL命令

创建GLOBAL SCHEMA_CHANGE JOB

全局框架改动和局部框架改动都包含ADD和DROP命令,但是它们的含义不尽相同。下表详述了它们的区别:

修改顶点和边(全局)

修改顶点和边

全局的ALTER语句在一个全局顶点类或边类中添加或删除属性。全局ALTER VERTEX | EDGE的语法与修改局部图数据库Schema的相关代码一致。

修改 ... 添加

新增的属性会被附加到图数据库Schema的最后。新添加的属性包含了DEFAULT字段。

修改... 删除

删除顶点边(全局)

运行 GLOBAL SCHEMA_CHANGE JOB

下面的例子中,命令SCHEMA_CHANGE JOB alter_friendship_make_library从边friend_of中删除了on_date属性,并将Book类添加到library图中。