快速入门
以下是一个完整示例,展示了如何使用 Cypher API 将数据从 AuraDB 实例加载到远程会话中,运行两个算法,然后将结果写回 AuraDB。
您可以在 Cypher API 页面找到每个步骤和过程的更多详细信息。
|
您现在可以在 AuraDB 中使用 Cypher API,而无需 Aura API 凭据。 |
投影图
首先将一些示例数据添加到 AuraDB 数据库中。
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);
下一步是将数据投影到远程会话中的图中。以下示例展示了如何同时运行 Cypher 投影并创建一个会话。
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(可选)参数。 |
| graphName | nodeCount | relationshipCount |
|---|---|---|
"myGraph" |
6 |
6 |
完成后,会话即可使用。如果您打开了 Aura 控制台,可以在图分析 (Graph Analytics) 视图中看到列出的会话。
您还可以使用 gds.graph.list() 过程获取投影图的详细信息。
CALL gds.graph.list()
YIELD graphName, nodeCount, relationshipCount
RETURN graphName, nodeCount, relationshipCount
| graphName | nodeCount | relationshipCount |
|---|---|---|
"myGraph" |
6 |
6 |
运行算法
在远程图上以 mutate 模式运行 PageRank 算法,从其结果中创建 pageRank 节点属性。
mutate 模式运行 PageRank 算法CALL gds.pageRank.mutate('myGraph', { mutateProperty: 'pageRank' })
YIELD ranIterations, nodePropertiesWritten
RETURN ranIterations, nodePropertiesWritten
| 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
| nodePropertiesWritten |
|---|
6 |
检查新节点属性的值。
CALL gds.graph.nodeProperty.stream('myGraph', 'fastrp')
YIELD nodeId, propertyValue
RETURN nodeId, propertyValue
ORDER BY nodeId
| 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 实例。
CALL gds.graph.drop('myGraph')
YIELD graphName
RETURN graphName
| graphName |
|---|
"myGraph" |
操作完成后,该会话将不再在 Aura 控制台中可见,也不会再产生使用费用。
如果您没有显式删除图,会话将在配置的 ttl 时间过后自动过期。