删除图的部分内容

删除图的部分内容有助于释放内存或移除之前通过算法生成的变异结果。

语法

图的不同删除操作的语法说明
CALL gds.graph.nodeProperties.drop(
    graphName: String,
    nodeProperties: String or List of Strings,
    configuration: Map
)
YIELD
    propertiesRemoved: Integer,
    graphName: String,
    nodeProperties: String or List of String
表 1. 参数
名称 类型 可选 描述

graphName

字符串

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

nodeProperties

字符串或字符串列表

图中需要删除的节点属性。

配置

Map

需要配置的额外参数。

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

concurrency

整数

4 [1]

用于运行算法的并发线程数。

failIfMissing(缺失时是否报错)

布尔值

true

如果为 false,该过程将忽略图中不存在的属性。

1. 在 GDS 会话 中,默认值为可用处理器数量。

表 3. 结果
名称 类型 描述

propertiesRemoved

整数

已删除属性的数量。

graphName

字符串

存储在目录中的图的名称。

nodeProperties

字符串或字符串列表

已删除的节点属性。

CALL gds.graph.relationships.drop(
    graphName: String,
    relationshipType: String
)
YIELD
  graphName: String,
  relationshipType: String,
  deletedRelationships: Integer,
  deletedProperties: Map
表 4. 参数
名称 类型 可选 描述

graphName

字符串

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

关系类型 (relationshipType)

字符串

图中需要删除的关系类型。

表 5. 结果
名称 类型 描述

graphName

字符串

存储在目录中的图的名称。

关系类型 (relationshipType)

字符串

已删除关系所属的类型。

deletedRelationships

整数

从内存图中删除的关系数量。

deletedProperties

整数

一个映射表,其中键为关系属性的名称,值为对应名称下已删除属性的数量。

示例

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

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

为了演示 GDS 在节点属性上的功能,我们将在 Neo4j 中创建一个小型社交网络图,并将其投影到我们的图目录中。

以下 Cypher 语句将在 Neo4j 数据库中创建示例图:
CREATE
  (florentin:Person { name: 'Florentin', age: 16 }),
  (adam:Person { name: 'Adam', age: 18 }),
  (veselin:Person { name: 'Veselin', age: 20 }),
  (hobbit:Book { name: 'The Hobbit', numberOfPages: 310 }),
  (florentin)-[:KNOWS { since: 2010 }]->(adam),
  (florentin)-[:KNOWS { since: 2018 }]->(veselin),
  (adam)-[:READ]->(hobbit)
投影小型社交网络图
MATCH (n:Person)-[r:KNOWS|READ]->(m:Person|Book)
RETURN gds.graph.project('socialGraph', n, m,
  {
    sourceNodeLabels: labels(n),
    targetNodeLabels: labels(m),
    sourceNodeProperties: n { .age },
    targetNodeProperties: CASE WHEN m:Person THEN m { .age } ELSE {} END,
    relationshipType: type(r)
  }
)
计算社交图中的度中心性
CALL gds.degree.mutate('socialGraph', {mutateProperty: 'score'})

删除节点属性

socialGraph 中所有投影节点删除 score 属性
CALL gds.graph.nodeProperties.drop('socialGraph', ['score'])
YIELD propertiesRemoved
表 6. 结果
propertiesRemoved

4

上述示例要求所有给定的属性必须存在于 至少一个 投影节点标签上。

忽略缺失的属性

默认情况下,如果给定的任何属性在图中不存在,该过程将失败。如果您想忽略缺失的属性,可以将 failIfMissing 配置选项设置为 false

尝试从 socialGraph 中所有投影节点删除 missing_score 属性
CALL gds.graph.nodeProperties.drop('socialGraph', ['missing_score'], {failIfMissing: false})
YIELD propertiesRemoved, nodeProperties
表 7. 结果
propertiesRemoved nodeProperties

0

[]

删除给定类型的关系

我们可以从目录中的命名图中删除给定类型的所有关系。这对于释放主内存或删除意外添加的关系类型非常有用。

只有当该关系类型不是图中存在的最后一种关系类型时,才能删除它。如果我们仍然想删除这些关系,则需要 删除该图

从命名图中删除所有 SIMILAR 类型的关系
CALL gds.graph.relationships.drop(
  'socialGraph',                    (1)
  'READ'                            (2)
)
YIELD
  graphName, relationshipType, deletedRelationships, deletedProperties
1 投影图的名称。
2 我们要从投影图中删除的关系类型。
表 8. 结果
graphName 关系类型 (relationshipType) deletedRelationships deletedProperties

"socialGraph"

"READ"

1

{}