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_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
临时图对属性类型有额外限制。如果所引用的图或图类型中包含以下属性类型,创建临时图时将报错:
SETMAPGEOGRAPHYLIST<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
'''