列出图

可以使用 gds.graph.list() 过程检索目录中关于图的信息。

语法

列出目录中图的信息
CALL gds.graph.list(
  graphName: String
) YIELD
  graphName: String,
  database: String,
  databaseLocation: String,
  configuration: Map,
  nodeCount: Integer,
  relationshipCount: Integer,
  schema: Map,
  schemaWithOrientation: Map,
  degreeDistribution: Map,
  density: Float,
  creationTime: Datetime,
  modificationTime: Datetime,
  sizeInBytes: Integer,
  memoryUsage: String
表 1. 参数
名称 类型 可选 描述

graphName

字符串

图在目录中存储时使用的名称。如果未指定图名称,将列出所有图的信息。如果指定了图名称但在目录中未找到,则会返回一个空列表。

表 2. 结果
名称 类型 描述

graphName

字符串

图的名称。

database

字符串

图已投影到的数据库名称。

databaseLocation

字符串

投影出该图的数据库位置。可以是 local(本地)、remote(远程)或 none(无)。

配置

Map

用于在内存中投影图的配置。

nodeCount

整数

图中的节点数。

relationshipCount

整数

图中关系的计数。

schema [1]

Map

投影图中包含的节点标签、关系类型和属性。

schemaWithOrientation

Map

投影图中包含的节点标签、关系类型、关系方向和属性。

degreeDistribution

Map

图中度的直方图。

density

浮点数

图的密度。

creationTime

Datetime

图投影的时间。

modificationTime

Datetime

图最后一次被修改的时间。

sizeInBytes

整数

Java 堆中用于存储该图的字节数。此功能并非在所有 JDK 上都受支持,可能会返回 -1。

memoryUsage

字符串

sizeInBytes 的人类可读描述。此功能并非在所有 JDK 上都受支持,可能会返回 null。

1. 在下一个主要版本中,此字段将具备 schemaWithOrientation 的语义。

该信息包含关于图的基本统计数据,例如节点和关系计数。结果字段 creationTime 指示图在内存中投影的时间。结果字段 modificationTime 指示图被处于 mutate 模式运行的算法更新的时间。

database 列指代相应图投影所在的数据库名称。仅允许在投影该命名图的数据库上引用它。

schema 由图中存储的节点和关系的相关信息组成。对于每个节点标签,模式会将标签映射到其属性键及其对应的属性类型。同样,模式将关系类型映射到其属性键和属性类型。属性类型可以是 IntegerFloatList of IntegerList of Float

schemaWithOrientationschema 的扩展版本,它将每个关系类型映射到其方向和属性。

对于较大的图,计算 degreeDistribution 字段可能会非常耗时。它的计算结果会按图进行缓存,因此后续针对同一图的列表查询会很快。为避免计算度分布,请指定一个省略它的 YIELD 子句。注意,不指定 YIELD 子句等同于请求返回所有可能的字段。

densityrelationshipCount 除以给定 nodeCount 的简单图所能拥有的最大关系数的结果。

示例

以下所有示例应在空数据库中运行。

这些示例以 Cypher 投影 为准。原生投影将在未来的版本中弃用。

为了演示 GDS 图列表的功能,我们将在 Neo4j 中创建一个小型社交网络图。

以下 Cypher 语句将在 Neo4j 数据库中创建示例图:
CREATE
  (florentin:Person { name: 'Florentin', age: 16 }),
  (adam:Person { name: 'Adam', age: 18 }),
  (veselin:Person { name: 'Veselin', age: 20 }),
  (florentin)-[:KNOWS { since: 2010 }]->(adam),
  (florentin)-[:KNOWS { since: 2018 }]->(veselin)

此外,我们将向图目录投影一些图,更多详细信息请参阅 Cypher 投影原生投影

使用 Cypher 投影投影 Person 节点和 KNOWS 关系
MATCH (n:Person)
OPTIONAL MATCH (n)-[r:KNOWS]->(m:Person)
RETURN gds.graph.project('personsCypher', n, m,
  {
    sourceNodeLabels: labels(n),
    targetNodeLabels: labels(m),
    relationshipType: type(r)
  }
)
使用 Cypher 投影投影带有 age 属性的 Person 节点和 KNOWS 关系
MATCH (n:Person)
OPTIONAL MATCH (n)-[r:KNOWS]->(m:Person)
RETURN gds.graph.project('personsWithAgeCypher', n, m,
  {
    sourceNodeLabels: labels(n),
    targetNodeLabels: labels(m),
    sourceNodeProperties: n { .age },
    targetNodeProperties: m { .age },
    relationshipType: type(r)
  }
)
使用原生投影投影 Person 节点和 KNOWS 关系
CALL gds.graph.project('personsNative', 'Person', 'KNOWS')

列出目录中所有图的基本信息

列出目录中所有图的基本信息
CALL gds.graph.list()
YIELD graphName, nodeCount, relationshipCount
RETURN graphName, nodeCount, relationshipCount
ORDER BY graphName ASC
表 3. 结果
graphName nodeCount relationshipCount

"personsCypher"

3

2

"personsNative"

3

2

"personsWithAgeCypher"

3

2

列出目录中特定命名图的扩展信息

列出目录中特定 Cypher 命名图的扩展信息
CALL gds.graph.list('personsCypher')
YIELD graphName, configuration, schemaWithOrientation
RETURN graphName, configuration.query AS query, schemaWithOrientation
表 4. 结果
graphName query schemaWithOrientation

"personsCypher"

"MATCH (n:Person) OPTIONAL MATCH (n)-[r:KNOWS]->(m:Person) RETURN gds.graph.project('personsCypher', n, m, { sourceNodeLabels: labels(n), targetNodeLabels: labels(m), relationshipType: type(r) } )"

{graphProperties={}, nodes={Person={}}, relationships={KNOWS={direction="DIRECTED", properties={}}}}

列出目录中特定原生命名图的扩展信息
CALL gds.graph.list('personsNative')
YIELD graphName, schemaWithOrientation, configuration
RETURN graphName, schemaWithOrientation, configuration.nodeProjection AS nodeProjection
表 5. 结果
graphName schemaWithOrientation nodeProjection

"personsNative"

{graphProperties={}, nodes={Person={}}, relationships={KNOWS={direction="DIRECTED", properties={}}}}

{Person={label="Person", properties={}}}

以上示例表明,nodeProjectionrelationshipProjection 仅在图使用原生投影时才有值,而当有 Cypher 投影图时会存在 query

尽管我们可以使用的不同投影存在不同的结果列,但其他数据(如图模式)是相同的,正如我们在上面的示例中所看到的。

特定图的度分布

列出关于特定图的度分布信息
CALL gds.graph.list('personsNative')
YIELD graphName, degreeDistribution;
表 6. 结果
graphName degreeDistribution

"personsNative"

{max=2, mean=0.6666666667, min=0, p50=0, p75=2, p90=2, p95=2, p99=2, p999=2}