快速入门

以下是一个完整示例,展示了如何使用 Cypher API 将数据从 AuraDB 实例加载到远程会话中,运行两个算法,然后将结果写回 AuraDB。

您可以在 Cypher API 页面找到每个步骤和过程的更多详细信息。

您现在可以在 AuraDB 中使用 Cypher API,而无需 Aura API 凭据

投影图

首先将一些示例数据添加到 AuraDB 数据库中。

在 Neo4j 数据库中创建一个示例图
CREATE
  (a:User {name: 'Alice', age: 23}),
  (b:User {name: 'Bridget', age: 34}),
  (c:User {name: 'Charles', age: 45}),
  (d:User {name: 'Dana', age: 56}),
  (e:User {name: 'Eve', age: 67}),
  (f:User {name: 'Fawad', age: 78}),

  (a)-[:LINK {weight: 0.5}]->(b),
  (b)-[:LINK {weight: 0.2}]->(a),
  (a)-[:LINK {weight: 4}]->(c),
  (c)-[:LINK {weight: 2}]->(e),
  (e)-[:LINK {weight: 1.1}]->(d),
  (e)-[:LINK {weight: -2}]->(f);
aura graph analytics serverless

下一步是将数据投影到远程会话中的图中。以下示例展示了如何同时运行 Cypher 投影并创建一个会话

使用远程 Cypher 投影将名为 'myGraph' 的图投影到新的 GDS 会话中
CYPHER runtime=parallel (1)
MATCH (source:User)
OPTIONAL MATCH (source)-[r:LINK]->(target:User)
WITH gds.graph.project('myGraph', source, target, {
  sourceNodeProperties: source { .age },
  targetNodeProperties: target { .age },
  relationshipProperties: r { .weight }
}, {
  memory: '2GB', ttl: duration({minutes: 30}) (2)
}) AS g
RETURN g.graphName, g.nodeCount, g.relationshipCount
1 建议使用 Cypher parallel 运行时,但不是强制性的。
2 设置 memory(强制)和 ttl(可选)参数。
表 1. 结果
graphName nodeCount relationshipCount

"myGraph"

6

6

完成后,会话即可使用。如果您打开了 Aura 控制台,可以在图分析 (Graph Analytics) 视图中看到列出的会话。

您还可以使用 gds.graph.list() 过程获取投影图的详细信息。

获取投影图的详细信息
CALL gds.graph.list()
YIELD graphName, nodeCount, relationshipCount
RETURN graphName, nodeCount, relationshipCount
表 2. 结果
graphName nodeCount relationshipCount

"myGraph"

6

6

运行算法

在远程图上以 mutate 模式运行 PageRank 算法,从其结果中创建 pageRank 节点属性。

mutate 模式运行 PageRank 算法
CALL gds.pageRank.mutate('myGraph', { mutateProperty: 'pageRank' })
YIELD ranIterations, nodePropertiesWritten
RETURN ranIterations, nodePropertiesWritten
表 3. 结果
ranIterations nodePropertiesWritten

1

6

使用新的 pageRank 节点属性作为 FastRP 算法 的输入,并创建 fastrp 节点属性。

mutate 模式运行 FastRP 算法
CALL gds.fastRP.mutate('myGraph', {
  featureProperties: ['pageRank'],
  relationshipWeightProperty: 'weight',
  iterationWeights: [1, 1, 1],
  randomSeed: 42,
  embeddingDimension: 8,
  mutateProperty: 'fastrp'
})
YIELD nodePropertiesWritten
RETURN nodePropertiesWritten
表 4. 结果
nodePropertiesWritten

6

检查新节点属性的值。

流式传输节点属性
CALL gds.graph.nodeProperty.stream('myGraph', 'fastrp')
YIELD nodeId, propertyValue
RETURN nodeId, propertyValue
ORDER BY nodeId
表 5. 结果
nodeId propertyValue

0

[-0.8200507164, -0.0124960952, 0.2896471024, -0.2785570323, -0.8645128608, -0.1037763357, 0.0, 0.4556654692]

1

[-0.3894904256, -0.5124961138, 0.9440460801, -0.9576280117, 0.0673641935, -1.0132695436, 0.0, 0.4451318979]

2

[-0.4223886132, 0.0, 0.3452976346, 0.190074876, -0.4223886132, 0.4223886132, 0.0, 0.0]

3

[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]

4

[-0.4223886132, 0.0, -0.6547023654, 0.190074876, -0.4223886132, 0.4223886132, 0.0, 0.0]

5

[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]

将结果写入数据库

您可以通过两种方式将新属性写入源 AuraDB 数据库:

  • 使用 gds.graph.nodeProperties.write() 过程(详见写入节点属性和标签)。

    写入 fastrp 属性
    CALL gds.graph.nodeProperties.write('myGraph', ['fastrp'])
    YIELD propertiesWritten
    RETURN propertiesWritten
    表 6. 结果
    propertiesWritten

    6

  • write 模式运行算法。

    write 模式运行 Louvain 算法
    CALL gds.louvain.write('myGraph', { writeProperty: 'louvain' })
    YIELD communityCount, modularity
    RETURN communityCount, modularity
    表 7. 结果
    communityCount modularity

    2

    0.3333333333333333

清理

当您不再需要运行任何算法时,请删除投影图。由于会话是隐式创建的(与图一起),删除图也会删除会话并销毁其对应的 Aura 实例。

删除图 'myGraph'
CALL gds.graph.drop('myGraph')
YIELD graphName
RETURN graphName
表 8. 结果
graphName

"myGraph"

操作完成后,该会话将不再在 Aura 控制台中可见,也不会再产生使用费用。

如果您没有显式删除图,会话将在配置的 ttl 时间过后自动过期。