入门
安装
面向 Snowflake 的 Neo4j 图分析作为原生应用程序交付。该应用程序可以从Snowflake Marketplace安装。在安装过程中,您需要启用事件共享。有关管理事件共享的更多信息,请参阅。
算法 API 介绍
Neo4j 图分析提供了算法目录,涵盖从 PageRank 到 Dijkstra 再到 WCC 的各种算法。
算法的执行分为三个步骤:投影、计算和写入结果。投影-计算-写入模式是图处理中常见的模式,您首先从数据中投影一个图,然后在该图上计算一些属性或指标,最后将结果写回您的数据存储。
使用示例
我们将提供一个更全面的示例,演示如何使用默认仓库配置和选择 CPU_X64_XS
计算池来运行 Neo4j 图分析。
在以下示例中,我们假设: - 应用程序已安装为 Neo4j_Graph_Analytics(默认)。 - 执行查询的角色可以访问所引用的消费者数据库对象。 - 执行查询的角色已授予使用 app_user 应用程序角色的权限。
在我们的示例中,我们创建了两个表,一个用于节点,一个用于关系。我们想要投影的图包含六个节点和四个关系。请注意列名 nodeId
以及 sourceNodeId
和 targetNodeId
。应用程序要求这些列存在才能提取数据。可选的附加列分别被视为节点或关系的属性。
如果节点和关系表已存在,但没有所需的列名,您可以在其上创建视图。
-- Use a role with the required privileges
USE ROLE ACCOUNTADMIN;
-- Create a consumer role for users of the Graph Analytics application
CREATE ROLE IF NOT EXISTS MY_CONSUMER_ROLE;
GRANT APPLICATION ROLE Neo4j_Graph_Analytics.app_user TO ROLE MY_CONSUMER_ROLE;
USE SCHEMA EXAMPLE_DB.DATA_SCHEMA;
CREATE TABLE NODES (nodeId Number);
INSERT INTO NODES VALUES (1), (2), (3), (4), (5), (6);
CREATE TABLE RELATIONSHIPS (sourceNodeId Number, targetNodeId Number);
INSERT INTO RELATIONSHIPS VALUES (1, 2), (2, 3), (4, 5), (5, 6);
-- Grant read access on the newly created tables to the application
GRANT USAGE ON DATABASE EXAMPLE_DB TO APPLICATION Neo4j_Graph_Analytics;
GRANT USAGE ON SCHEMA EXAMPLE_DB.DATA_SCHEMA TO APPLICATION Neo4j_Graph_Analytics;
GRANT SELECT ON ALL TABLES IN SCHEMA EXAMPLE_DB.DATA_SCHEMA TO APPLICATION Neo4j_Graph_Analytics;
GRANT CREATE TABLE ON SCHEMA EXAMPLE_DB.DATA_SCHEMA TO APPLICATION Neo4j_Graph_Analytics;
-- Ensure the consumer role has access to tables created by the application
GRANT ALL PRIVILEGES ON FUTURE TABLES IN SCHEMA EXAMPLE_DB.DATA_SCHEMA TO ROLE MY_CONSUMER_ROLE;
-- Use the consumer role to run the algorithm and inspect the output
USE ROLE MY_CONSUMER_ROLE;
我们像这样在投影配置中捕获它:
'project': {
'nodeTables': ['EXAMPLE_DB.DATA_SCHEMA.NODES'],
'relationshipTables': {
'EXAMPLE_DB.DATA_SCHEMA.RELATIONSHIPS': {
'sourceTable': 'EXAMPLE_DB.DATA_SCHEMA.NODES',
'targetTable': 'EXAMPLE_DB.DATA_SCHEMA.NODES',
'orientation': 'NATURAL'
}
}
}
节点和关系都可以从多个表中读取。使用 nodeTables
和 relationshipTables
配置参数,我们可以指定从哪些表读取。nodeTables
配置参数指定了一个包含节点的表数组。每个节点表的名称都映射到图中的一个节点标签。关系表在映射中指定,其中键是表的名称,值是配置参数的映射。每个关系表的名称都映射到图中的一个关系类型。sourceTable
和 targetTable
配置参数指定关系表引用的节点表。
如果我们要使用不同的方向投影关系,可以在配置中指定。可能的值包括 NATURAL
(默认)、UNDIRECTED
和 REVERSE
。
在我们的示例中,我们将使用弱连接组件算法 (WCC) 来查找图的断开部分。我们可以通过指定我们希望输出“漂亮的数字”来组合 WCC 的算法计算配置:
'compute': { 'consecutiveIds': true }
计算出 WCC 后,我们将结果写回表中以进行进一步分析。如果该表已存在,则会创建并覆盖它。
'write': [{
'nodeLabel': 'NODES',
'outputTable': 'EXAMPLE_DB.DATA_SCHEMA.NODES_COMPONENTS'
}]
由于这是第一次写回我们的示例模式,我们还需要考虑权限。我们需要向应用程序授予模式上的 CREATE TABLE
权限。
最后,有了所有这些准备,我们就可以开始了!
CALL Neo4j_Graph_Analytics.graph.wcc('CPU_X64_XS', {
'project': {
'nodeTables': ['EXAMPLE_DB.DATA_SCHEMA.NODES'],
'relationshipTables': {
'EXAMPLE_DB.DATA_SCHEMA.RELATIONSHIPS': {
'sourceTable': 'EXAMPLE_DB.DATA_SCHEMA.NODES',
'targetTable': 'EXAMPLE_DB.DATA_SCHEMA.NODES',
'orientation': 'NATURAL'
}
}
},
'compute': { 'consecutiveIds': true },
'write': [{
'nodeLabel': 'NODES',
'outputTable': 'EXAMPLE_DB.DATA_SCHEMA.NODES_COMPONENTS'
}]
});
请注意,我们可以调用 USE DATABASE Neo4j_Graph_Analytics
,然后调用 CALL graph.wcc(…)
,以避免使用完全限定名。
此查询运行后,我们可以从表中选择组件。
SELECT * FROM EXAMPLE_DB.DATA_SCHEMA.NODES_COMPONENTS;
这将列出每个节点的组件。我们可以看到,该图由两个独立的组件组成,每个组件包含三个节点。
NODE VALUE
1 0
2 0
3 0
4 1
5 1
6 1
大多数算法会产生节点属性结果。一些算法,如 KNN 和节点相似性,会产生关系结果。这些特定变体将在算法目录中介绍。
现在结果已写回您的端点,您可以检查并进一步处理它们——例如,将它们输入到另一个 Neo4j 图分析算法中。
更大示例
有关包含数据准备为节点和关系表/视图格式的更大使用示例,请参见TPC-H 数据上的购物篮分析示例。它使用了 Snowflake 中可用的TPC-H 示例数据。