导出为 CSV

此功能在 AuraDS 中不可用。

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

此功能处于 Beta 测试阶段。有关功能分级的更多信息,请参阅 API 分级

我们可以将图目录中存储的图导出为一组 CSV 文件。图中存在的所有节点、关系和属性都会被导出。这包括通过 gds.graph.project 投影的数据,以及通过在 mutate 模式下运行算法所添加的数据。导出 CSV 文件的位置可以通过 neo4j.conf 中的配置参数 gds.export.location 进行配置。所有文件都将存储在指定导出名称的子文件夹中。如果给定的导出名称对应的文件夹已存在,导出将会失败。

此功能必须配置 gds.export.location 参数。

语法

将命名图导出为一组 CSV 文件
CALL gds.graph.export.csv(graphName: String, configuration: Map)
YIELD
    graphName: String,
    exportName: String,
    nodeCount: Integer,
    nodePropertyCount: Integer,
    relationshipCount: Integer,
    relationshipTypeCount: Integer,
    relationshipPropertyCount: Integer,
    writeMillis: Integer
表 1. 参数
名称 类型 可选 描述

graphName

字符串

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

配置

Map

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

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

exportName

字符串

none

导出图的目录名称。导出 CSV 文件的绝对路径取决于 neo4j.conf 中的配置参数 gds.export.location

writeConcurrency

整数

4

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

defaultRelationshipType

字符串

__ALL__

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

additionalNodeProperties

字符串、列表或映射

{}

允许从支持投影图的原始图中导出额外的节点属性。

useLabelMapping

布尔值

false

导出图时是否使用节点标签映射的标志

表 3. 结果
名称 类型 描述

graphName

字符串

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

exportName

字符串

导出图的目录名称。

nodeCount

整数

已导出的节点数量。

nodePropertyCount

整数

已导出的节点属性数量。

relationshipCount

整数

已导出的关系数量。

relationshipTypeCount

整数

已导出的关系类型数量。

relationshipPropertyCount

整数

已导出的关系属性数量。

writeMillis

整数

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

估算

与 GDS 中的许多其他过程一样,导出到 CSV 也具有估算模式。有关更多详细信息,请参阅 内存估算。使用 gds.graph.export.csv.estimate 过程,可以估算导出 CSV 文件所需的磁盘空间。估算使用采样来生成更精确的估计。

估算将命名图导出到 CSV 文件所需的磁盘空间。
CALL gds.graph.export.csv.estimate(graphName:String, configuration: Map)
YIELD
  nodeCount: Integer,
  relationshipCount: Integer,
  requiredMemory: String,
  treeView: String,
  mapView: Map,
  bytesMin: Integer,
  bytesMax: Integer,
  heapPercentageMin: Float,
  heapPercentageMax: Float;
表 4. 参数
名称 类型 可选 描述

graphName

字符串

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

配置

Map

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

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

exportName

字符串

none

导出图的目录名称。导出 CSV 文件的绝对路径取决于 neo4j.conf 中的配置参数 gds.export.location

writeConcurrency

整数

4

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

defaultRelationshipType

字符串

__ALL__

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

additionalNodeProperties

字符串、列表或映射

{}

允许从支持投影图的原始图中导出额外的节点属性。

useLabelMapping

布尔值

false

导出图时是否使用节点标签映射的标志

表 6. 结果
名称 类型 描述

nodeCount

整数

图中的节点数。

relationshipCount

整数

图中的关系总数。

requiredMemory

字符串

以人类可读格式表示的所需内存估算值。

treeView

字符串

所需内存的更详细表示,包括以人类可读格式对不同组件的估算。

mapView

Map

所需内存的更详细表示,包括以结构化格式对不同组件的估算。

bytesMin

整数

所需的最少字节数。

bytesMax

整数

所需的最大字节数。

heapPercentageMin

浮点数

所需配置最大堆的最小百分比。

heapPercentageMax

浮点数

所需配置最大堆的最大百分比。

导出格式

导出的 CSV 文件格式基于 Neo4j Admin import 命令支持的格式。

GDS 不会在数据中为节点标签和关系类型添加列。为了使用 Neo4j Admin 导入它们,应使用 --nodes--relationship 参数设置标签和类型。

更多详细信息请见此处:使用相同的 每个节点的标签每种关系的类型

节点

节点按其标签分组导出到文件中,即对于图中存在的每种标签组合,都会创建一组导出文件。导出文件的命名模式为:nodes_LABELS_INDEX.csv,其中

  • LABELS 是用 _ 连接的标签有序列表。

  • INDEX 是 0 到并发数之间的一个数字。

对于每种标签组合,会创建一个或多个数据文件,因为每个导出器线程都会导出到一个单独的文件中。

此外,每种标签组合都会生成一个单独的头文件,其中包含一行描述数据文件列的内容。有关头文件的更多信息,请参阅:CSV 头文件格式

例如,一个具有节点组合 :A:B:A:B 的图可能会创建以下文件

nodes_A_header.csv
nodes_A_0.csv
nodes_B_header.csv
nodes_B_0.csv
nodes_B_2.csv
nodes_A_B_header.csv
nodes_A_B_0.csv
nodes_A_B_1.csv
nodes_A_B_2.csv

节点标签映射

当配置参数 useLabelMapping 设置为 true 时,标签名称在导出期间将映射为整数。此映射将写入一个名为 label-mappings.csv 的新文件。当标签名称包含下划线或操作系统禁止在文件名中使用的特殊字符时,需要此参数。

使用上面的示例,如果启用了标签映射,label-mappings.csv 的内容可能是

index,label
0,A
1,B

在这种情况下,将为节点创建这些文件

nodes_0_header.csv
nodes_0_0.csv
nodes_1_header.csv
nodes_1_0.csv
nodes_1_2.csv
nodes_0_1_header.csv
nodes_0_1_0.csv
nodes_0_1_1.csv
nodes_0_1_2.csv

关系

关系文件的格式与节点文件类似。关系按关系类型分组导出到文件中。导出文件的命名模式为:relationships_TYPE_INDEX.csv,其中

  • TYPE 是关系类型

  • INDEX 是 0 到并发数之间的一个数字。

对于每种关系类型,会创建一个或多个数据文件,因为每个导出器线程都会导出到一个单独的文件中。

此外,每种关系类型都会生成一个单独的头文件,其中包含一行描述数据文件列的内容。

例如,一个具有关系类型 :KNOWS:LIVES_IN 的图可能会创建以下文件

relationships_KNOWS_header.csv
relationships_KNOWS_0.csv
relationships_LIVES_IN_header.csv
relationships_LIVES_IN_0.csv
relationships_LIVES_IN_2.csv

示例

my-graph 从 GDS 导出到目录 my-export
CALL gds.graph.export.csv('my-graph', { exportName: 'my-export' })

带有额外节点属性的示例

假设我们在 Neo4j 数据库中有一个图 my-db-graph,它有一个字符串节点属性 myproperty,并且我们有一个对应的内存中图 my-in-memory-graph,它没有 myproperty 节点属性。如果我们想导出 my-in-memory-graph 但额外添加来自 my-db-graphmyproperty 属性,我们可以使用 additionalProperties 配置参数。

my-in-memory-graph 从 GDS 导出,并从 my-db-graph 获取 myproperty 到目录 my-export
CALL gds.graph.export.csv('my-graph', { exportName: 'my-export', additionalNodeProperties: ['myproperty']})

原始数据库 (my-db-graph) 在加载我们导出的内存表示 (my-in-memory-graph) 后不得发生更改,以便导出能正常工作。

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

my-in-memory-graph 从 GDS 导出,从 my-db-graph 获取 myproperty 并设置默认值到目录 my-export
CALL gds.graph.export.csv('my-graph', { exportName: 'my-export', additionalNodeProperties: [{ myproperty: {defaultValue: 'my-default-value'}}] })