跳转至
开发版采用单机部署,无需产品 License 文件。需要多机部署或大规模性能测试? 了解企业版

CREATE TEMPORARY GRAPH

CREATE TEMPORARY GRAPH语句用于创建临时图。

临时图存放在创建它的 Graph 服务的内存中。该服务退出时,临时图也会销毁;只有连接到该服务的会话才能访问此图。

临时图创建完成后,即使其创建所依赖的图类型或图发生变更或被删除,该临时图也不会受到影响。

使用范围

  • 临时图可在后续查询中执行INSERT、SET、DELETE等操作。
  • 支持以下四种创建方式:
    • 基于现有图创建
    • 基于子图创建
    • 基于已存在的命名图类型创建空图
    • 在语句中定义匿名图类型并创建空图

Note

要检查或压缩悦数图数据库开发版中临时图的内存使用情况,可调用内置过程temporary_graph_compact。更多信息,可运行SHOW PROCEDURE temporary_graph_compact查看过程详情。

前提条件

  • 基于现有图、子图或命名图类型创建时,需先创建所引用的图或图类型。更多信息,请参见 CREATE GRAPH 和 CREATE GRAPH TYPE。基于匿名图类型创建时,无需预先创建图或图类型。
  • 基于现有图或子图创建时,须具备在对应 Schema 执行MATCH ANY GRAPH操作的权限,或具备在所引用图上执行MATCH操作的权限。更多信息,请参见角色与权限。
  • 基于匿名图类型创建时,须具备在默认 Schema(/default_schema)执行CREATE GRAPH TYPE操作的权限。

权限规则

  • 执行此语句的用户将成为新创建的临时图的所有者(OWNER)。临时图的OWNER不可变更。
  • 仅具备角色ADMIN的用户以及所有者可对临时图进行 DQL 和 DML 操作。

语法

create_temporary_graph_statement
CREATE TEMPORARY TEMP GRAPH IF NOT EXISTS temp_graph_name AS COPY OF schema_reference / graph_name GRAPH { statement_block } TYPED schema_reference / graph_type_name TYPED { graph_type_specification }

create_temporary_graph_statement ::=
  'CREATE' ('TEMPORARY'|'TEMP') 'GRAPH' ('IF NOT EXISTS')? temp_graph_name
  ( ('AS COPY OF' ( (schema_reference '/')? graph_name | 'GRAPH' '{' statement_block '}' ) )
  | ('TYPED'? (schema_reference '/')? graph_type_name )
  | ('TYPED'? '{' graph_type_specification '}') )

参数

IF NOT EXISTS

该子句检查是否已存在同名的临时图。如果已存在,则不会创建新的临时图,也不会抛出异常。

若不指定此子句,且同名的临时图已存在,则会抛出异常。

temp_graph_name

待创建的临时图名称。temp_graph_name必须是常规标识符且以井号(#)开头。有关标识符的更多信息,请参见标识符命名规则。

schema_reference

所引用的 Schema 路径。

此语句中两处schema_reference分别为创建临时图所引用图的 Schema 路径和所引用图类型的 Schema 路径。

绝对路径或相对路径均可在语句中使用。如果指定了 Schema 路径,将基于所引用的图或所引用的图类型创建临时图。关于设置和查看 Schema 的更多信息,请参见 SESSION SET 和 SHOW CURRENT_SCHEMA。

graph_name

创建临时图所引用的源图名称。该图必须已存在。

基于图创建临时图时,该图所属的图类型至少包含一个点类型。

基于现有图创建临时图时,源图的数据会被复制到临时图中;后续对临时图的修改不会影响源图。

statement_block

一个包含一条或多条语句的语句块,用于获取创建临时图所引用的子图。该子图可以为空(不含任何图元素),但不能包含悬挂边。更多信息,请参见语句块。

graph_type_name

创建临时图所引用的图类型名称。该图类型必须已存在于 Catalog 中。

基于图类型创建的临时图为空图,后续可通过INSERT、IMPORT等方式填充数据。

graph_type_specification

在{...}中直接定义临时图的点类型、边类型和属性,不引用已存在的命名图类型。这种定义称为匿名图类型,无需先执行CREATE GRAPH TYPE。TYPED关键字可省略。

匿名图类型中的点类型、边类型和属性定义规则与 CREATE GRAPH TYPE 相同。基于匿名图类型创建的临时图为空图,后续可通过INSERT或IMPORT填充数据。

使用说明

  • 临时图创建后可通过USE声明为工作图,并执行查询或 DML 操作。

Caution

临时图对属性类型有额外限制。如果所引用的图或图类型中包含以下属性类型,创建临时图时将报错:

  • SET
  • MAP
  • GEOGRAPHY
  • LIST<SET/MAP/GEOGRAPHY>

示例

以下基于现有图或命名图类型的示例使用示例数据集。匿名图类型示例无需该数据集。

基于现有图创建临时图

基于当前 Schema 中的图创建临时图

CREATE TEMPORARY GRAPH IF NOT EXISTS #movie_temporary_graph AS COPY OF movie

上述示例基于图movie创建名为#movie_temporary_graph的临时图。基于该临时图,可执行以下示例操作:

  • 将临时图#movie_temporary_graph声明为工作图,然后查询图中边的数量。

    '''
    USE #movie_temporary_graph
    MATCH ()-[]->()
    RETURN count(*) AS num GROUP BY () 
    '''
    

    返回:

    +-------+
    | num   |
    +-------+
    | 10175 |
    +-------+
    
  • 往临时图#movie_temporary_graph中插入点。

    '''
    USE #movie_temporary_graph
    INSERT (v@Director{id: 11, name: "Alice"})
    '''
    
  • 更新临时图#movie_temporary_graph中的点。

    '''
    USE #movie_temporary_graph
    MATCH (v@Director{id: 11})
    SET v.name = "Bob"
    '''
    
  • 删除临时图#movie_temporary_graph中的点。

    '''
    USE #movie_temporary_graph
    MATCH (v@Director{id: 11})
    DELETE v
    '''
    

基于指定 Schema 中的图创建临时图

CREATE TEMPORARY GRAPH IF NOT EXISTS #my_temporary_graph AS COPY OF /default_schema/my_graph

上述示例基于在 CREATE GRAPH 示例部分所创建的图my_graph创建名为#my_temporary_graph的临时图。

基于子图创建临时图

CREATE TEMPORARY GRAPH IF NOT EXISTS #sub_movie_temp AS COPY OF GRAPH { USE movie MATCH (v) RETURN v }

上述示例基于MATCH语句返回的子图创建临时图。

基于图类型创建空临时图

'''
CREATE TEMPORARY GRAPH IF NOT EXISTS #temp_movie TYPED movie_type
'''

基于匿名图类型创建空临时图

在 Graph 服务中执行以下语句,无需预先创建图类型:

'''
CREATE TEMPORARY GRAPH #person_temp_graph {
    NODE person (:Person {id INT64 PRIMARY KEY, name STRING})
}
'''

上述示例创建空临时图#person_temp_graph,其中包含一个名为person的点类型,标签为Person,属性为主键id和字符串name。也可在{前添加TYPED关键字,效果相同。

创建后,可执行SHOW CREATE GRAPH #person_temp_graph查看图结构,或通过USE #person_temp_graph声明工作图后插入数据。

基于指定 Schema 中的图/类型创建临时图

以下示例假设/my_schema已存在并导入示例数据集。

'''
// 基于指定 Schema 中的图
CREATE TEMPORARY GRAPH IF NOT EXISTS #temp_movie AS COPY OF /my_schema/movie
'''

'''
// 基于指定 Schema 中的图类型
CREATE TEMPORARY GRAPH IF NOT EXISTS #temp_movie TYPED /my_schema/movie_type
'''

更多信息