列出图

可以使用 `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

整数

图中关系的数量。

schema [1]

映射

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

schemaWithOrientation

映射

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

degreeDistribution

映射

图中度的直方图。

density

浮点数

图的密度。

creationTime

日期时间

投影图的时间。

modificationTime

日期时间

图上次修改的时间。

sizeInBytes

整数

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

memoryUsage

字符串

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

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

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

`database` 列指的是相应图已投影到的数据库的名称。仅允许在已投影到的数据库上引用过程中命名的图。

`schema` 由有关存储在图中的节点和关系的信息组成。对于每个节点标签,`schema` 将标签映射到其属性键及其对应的属性类型。类似地,`schema` 将关系类型映射到其属性键和属性类型。属性类型可以是 `Integer`、`Float`、`List of Integer` 或 `List of Float`。

`schemaWithOrientation` 是 `schema` 的扩展版本,其中对于每个关系类型,它映射到其方向和属性。

对于较大的图,`degreeDistribution` 字段的计算可能相当耗时。它的计算针对每个图进行缓存,因此对同一图的后续列表将很快。要避免计算度分布,请指定省略它的 `YIELD` 子句。请注意,不指定 `YIELD` 子句与请求返回所有可能的返回字段相同。

`density` 是 `relationshipCount` 除以具有给定 `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 查询 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 节点投影

"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}