列出图

可以使用 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(无)之一。

configuration

映射

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

nodeCount

整数

图中的节点数。

relationshipCount

整数

图中的关系数。

模式 [1]

映射

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

schemaWithOrientation

映射

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

degreeDistribution

映射

图中度数的直方图。

density

浮点数

图的密度。

creationTime

日期时间

图投影的时间。

modificationTime

日期时间

图最后修改的时间。

sizeInBytes

整数

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

memoryUsage

字符串

sizeInBytes 的可读描述。此功能并非所有 JDK 都支持,可能返回 null。

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

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

database 列指的是对应图已投影到的数据库的名称。在过程中引用命名图只允许在其已投影到的数据库上进行。

schema 包含图中存储的节点和关系的信息。对于每个节点标签,模式将其映射到其属性键及其对应的属性类型。类似地,模式将关系类型映射到其属性键和属性类型。属性类型可以是 Integer(整数)、Float(浮点数)、List of Integer(整数列表)或 List 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 投影来投影带有属性 agePerson 节点和 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 仅在图使用原生投影时才有值,而 query 在我们有 Cypher 投影图时存在。

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

特定图的度分布

列出特定图的度分布信息
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}

© . All rights reserved.