导出到新的 Neo4j 数据库

此功能在 AuraDS 中不可用。

在 Aura 图分析中,此功能仅可通过 Python 客户端使用。它目前无法作为 Cypher 过程或函数使用。

我们可以根据存储在图目录中的投影图创建新的 Neo4j 数据库。投影图中存在的所有节点、关系和属性都会被写入一个新的 Neo4j 数据库。这包括通过 gds.graph.project 投影的数据,以及通过在 mutate 模式下运行算法所添加的数据。新创建的数据库将使用指定的数据库名称存储在 Neo4j 的 databases 目录下。

此功能在以下示例场景中非常有用:

  • 通过导出数据而非写回(write back),避免对生产系统造成沉重的写入负载。

  • 创建生产系统的分析视图,作为运行算法的基础。

  • 生成分析结果的快照,并将其持久化以用于归档和检查。

  • 在组织内部共享分析结果。

语法

将投影图导出到 Neo4j 数据库目录中的新数据库
CALL gds.graph.export(graphName: String, configuration: Map)
YIELD
    dbName: String,
    graphName: String,
    nodeCount: Integer,
    nodePropertyCount: Integer,
    relationshipCount: Integer,
    relationshipTypeCount: Integer,
    relationshipPropertyCount: Integer,
    writeMillis: Integer
表 1. 参数
名称 类型 可选 描述

graphName

字符串

图在目录中存储时所使用的名称。

配置

Map

用于配置数据库导出的其他参数。

表 2. 配置
名称 类型 默认 可选 描述

dbName

字符串

none

导出的 Neo4j 数据库名称。

dbFormat

字符串

db_format 默认值

数据库格式。有效值为:空(无值,默认)、standardalignedhigh_limitblock

writeConcurrency

布尔值

4

用于写入数据库的并发线程数。

enableDebugLog

布尔值

false

将调试信息打印到 Neo4j 日志文件中(已弃用)。

batchSize

整数

10000

单个线程一次处理的实体数量。

defaultRelationshipType

字符串

__ALL__

用于 * 关系投影的关系类型。

additionalNodeProperties

字符串、列表或映射

{}

允许从支持内存图的原始数据库中导出额外的节点属性。

jobId

字符串

内部生成

可以提供一个 ID 以更轻松地跟踪算法的进度。

logProgress

布尔值

true

如果禁用,进度百分比将不会被记录。

表 3. 结果
名称 类型 描述

dbName

字符串

导出的 Neo4j 数据库名称。

graphName

字符串

图在目录中存储时所使用的名称。

nodeCount

整数

已导出的节点数量。

nodePropertyCount

整数

已导出的节点属性数量。

relationshipCount

整数

已导出的关系数量。

relationshipTypeCount

整数

已导出的关系类型数量。

relationshipPropertyCount

整数

已导出的关系属性数量。

writeMillis

整数

将图写入新数据库所花费的毫秒数。

示例

my-graph 从 GDS 导出到名为 mydatabase 的 Neo4j 数据库中
CALL gds.graph.export('my-graph', { dbName: 'mydatabase' })

可以使用 数据库管理命令 启动新数据库。

使用导出过程时,该数据库不得已存在。需要使用以下命令手动创建它。

导出图之后,我们可以启动新数据库并查询导出的图
:use system
CREATE DATABASE mydatabase;
:use mydatabase
MATCH (n) RETURN n;

包含额外节点属性的示例

假设我们在 Neo4j 数据库中有一个图 my-db-graph,它包含一个字符串类型的节点属性 myproperty;同时我们有一个对应的内存图 my-in-memory-graph,但其中不包含 myproperty 属性。如果我们想导出 my-in-memory-graph,同时从 my-db-graph 中添加 myproperty 属性,可以使用 additionalProperties 配置参数。

my-in-memory-graph 从 GDS 导出,并附带 my-db-graph 中的 myproperty,存入名为 mydatabase 的 Neo4j 数据库中
CALL gds.graph.export('my-graph', { dbName: 'mydatabase', additionalNodeProperties: ['myproperty']})

可以使用 数据库管理命令 启动新数据库。

为了使导出正常工作,自加载内存表示(my-in-memory-graph)以来,原始数据库(my-db-graph)不得发生更改。

additionalNodeProperties 参数使用的语法与 图投影过程 中的 nodeProperties 相同。因此,我们例如可以为 myproperty 定义一个默认值。

my-in-memory-graph 从 GDS 导出,并附带 my-db-graph 中带有默认值的 myproperty,存入名为 mydatabase 的 Neo4j 数据库中
CALL gds.graph.export('my-graph', { dbName: 'mydatabase', additionalNodeProperties: [{ myproperty: {defaultValue: 'my-default-value'}}] })