Source: https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/ddl/graph-projection/create/ Documentation version: v5.3.2 # CREATE TEMPORARY GRAPH `CREATE TEMPORARY GRAPH`语句用于创建临时图。 临时图存放在创建它的 Graph 服务的内存中。该服务退出时,临时图也会销毁;只有连接到该服务的会话才能访问此图。 临时图创建完成后,即使其创建所依赖的图类型或图发生变更或被删除,该临时图也不会受到影响。 ## 使用范围 - 临时图可在后续查询中执行`INSERT`、`SET`、`DELETE`等操作。 - 支持以下四种创建方式: - 基于现有图创建 - 基于子图创建 - 基于已存在的命名图类型创建空图 - 在语句中定义匿名图类型并创建空图 Note 要检查或压缩悦数图数据库开发版中临时图的内存使用情况,可[调用](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/dql/call/call-procedure/)内置过程`temporary_graph_compact`。更多信息,可运行`SHOW PROCEDURE temporary_graph_compact`查看过程详情。 ## 前提条件 - 基于现有图、子图或命名图类型创建时,需先创建所引用的图或图类型。更多信息,请参见 [CREATE GRAPH](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/ddl/graph/create/) 和 [CREATE GRAPH TYPE](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/ddl/graph-type/create/)。基于匿名图类型创建时,无需预先创建图或图类型。 - 基于现有图或子图创建时,须具备在对应 Schema 执行`MATCH ANY GRAPH`操作的权限,或具备在所引用图上执行`MATCH`操作的权限。更多信息,请参见[角色与权限](https://dev-docs.yueshu.com.cn/v5.3.2/server-admin/authorization/)。 - 基于匿名图类型创建时,须具备在默认 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`必须是常规标识符且以井号(`#`)开头。有关标识符的更多信息,请参见[标识符命名规则](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/overview/keywords-identifiers/#_3)。 ### `schema_reference` 所引用的 Schema 路径。 此语句中两处`schema_reference`分别为创建临时图所引用图的 Schema 路径和所引用图类型的 Schema 路径。 绝对路径或相对路径均可在语句中使用。如果指定了 Schema 路径,将基于所引用的图或所引用的图类型创建临时图。关于设置和查看 Schema 的更多信息,请参见 [SESSION SET](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/sessions/set/) 和 [SHOW CURRENT_SCHEMA](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/data-admin/show/show-current-schema/)。 ### `graph_name` 创建临时图所引用的源图名称。该图必须已存在。 基于图创建临时图时,该图所属的图类型至少包含一个点类型。 基于现有图创建临时图时,源图的数据会被复制到临时图中;后续对临时图的修改不会影响源图。 ### `statement_block` 一个包含一条或多条语句的语句块,用于获取创建临时图所引用的子图。该子图可以为空(不含任何图元素),但不能包含悬挂边。更多信息,请参见[语句块](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/statement-block/)。 ### `graph_type_name` 创建临时图所引用的图类型名称。该图类型必须已存在于 Catalog 中。 基于图类型创建的临时图为空图,后续可通过`INSERT`、`IMPORT`等方式填充数据。 ### `graph_type_specification` 在`{...}`中直接定义临时图的点类型、边类型和属性,不引用已存在的命名图类型。这种定义称为匿名图类型,无需先执行`CREATE GRAPH TYPE`。`TYPED`关键字可省略。 匿名图类型中的点类型、边类型和属性定义规则与 [CREATE GRAPH TYPE](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/ddl/graph-type/create/) 相同。基于匿名图类型创建的临时图为空图,后续可通过`INSERT`或`IMPORT`填充数据。 ## 使用说明 - 临时图创建后可通过`USE`声明为工作图,并执行查询或 DML 操作。 Caution 临时图对属性类型有额外限制。如果所引用的图或图类型中包含以下属性类型,创建临时图时将报错: - `SET` - `MAP` - `GEOGRAPHY` - `LIST` ## 示例 以下基于现有图或命名图类型的示例使用[示例数据集](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/overview/example-dataset/)。匿名图类型示例无需该数据集。 ### 基于现有图创建临时图 #### 基于当前 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](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/ddl/graph/create/#schema_1) 示例部分所创建的图`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`已存在并导入[示例数据集](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/overview/example-dataset/)。 ```` ''' // 基于指定 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 ''' ```` ## 更多信息 - [SHOW GRAPHS](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/data-admin/show/show-graphs/) - [SHOW GRAPHS](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/data-admin/show/show-graphs/) - [SHOW CREATE GRAPH](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/data-admin/show/show-create-graph/) - [CREATE SCHEMA](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/ddl/schema/create/) - [IMPORT](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/in-out/import/)