入门

安装

面向 Snowflake 的 Neo4j 图分析作为原生应用程序交付。该应用程序可以从Snowflake Marketplace安装。在安装过程中,您需要启用事件共享。有关管理事件共享的更多信息,请参阅。

应用程序权限

该应用程序需要 CREATE COMPUTE POOL 和 CREATE WAREHOUSE 权限。授予这些权限最简单的方法是通过 Snowsight,选择 数据产品应用程序Neo4j 图分析权限授予。最后,单击同一页面上的激活按钮。这将触发应用程序创建内部资源,例如计算池

运行算法时,应用程序需要某些权限才能运行。有关详细信息,请参阅应用程序权限管理。我们还在下方提供了一个使用示例,以展示如何授予这些权限以及运行算法。

消费者角色和权限

应用程序用户也需要某些权限。有关详细信息,请参阅消费者权限管理。下方的使用示例包含了消费者权限方面的内容。

算法 API 介绍

Neo4j 图分析提供了算法目录,涵盖从 PageRank 到 Dijkstra 再到 WCC 的各种算法。

算法的执行分为三个步骤:投影、计算和写入结果。投影-计算-写入模式是图处理中常见的模式,您首先从数据中投影一个图,然后在该图上计算一些属性或指标,最后将结果写回您的数据存储。

这三个步骤在相应的章节中进行了更广泛的介绍:投影计算写入

写入结果

算法完成后,我们会立即将数据写回您的表中,以便进行检查和进一步处理。在这里,我们需要您指定输出表和标签(Neo4j 的一个概念,可以理解为表名)等信息。

准备工作

在运行算法之前,您的环境需要正确设置。

我们需要确保使用具有所需权限的角色来使用该应用程序。

USE ROLE <consumer_user_role>;

(可选)要运行算法而不提供完全限定的端点名称,我们可以执行以下命令。

USE DATABASE Neo4j_Graph_Analytics;

这里我们假设应用程序以默认名称 Neo4j_Graph_Analytics 安装。

使用示例

我们将提供一个更全面的示例,演示如何使用默认仓库配置和选择 CPU_X64_XS 计算池来运行 Neo4j 图分析。

在以下示例中,我们假设: - 应用程序已安装为 Neo4j_Graph_Analytics(默认)。 - 执行查询的角色可以访问所引用的消费者数据库对象。 - 执行查询的角色已授予使用 app_user 应用程序角色的权限。

在我们的示例中,我们创建了两个表,一个用于节点,一个用于关系。我们想要投影的图包含六个节点和四个关系。请注意列名 nodeId 以及 sourceNodeIdtargetNodeId。应用程序要求这些列存在才能提取数据。可选的附加列分别被视为节点或关系的属性。

如果节点和关系表已存在,但没有所需的列名,您可以在其上创建视图。

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

节点和关系都可以从多个表中读取。使用 nodeTablesrelationshipTables 配置参数,我们可以指定从哪些表读取。nodeTables 配置参数指定了一个包含节点的表数组。每个节点表的名称都映射到图中的一个节点标签。关系表在映射中指定,其中键是表的名称,值是配置参数的映射。每个关系表的名称都映射到图中的一个关系类型。sourceTabletargetTable 配置参数指定关系表引用的节点表。

如果我们要使用不同的方向投影关系,可以在配置中指定。可能的值包括 NATURAL(默认)、UNDIRECTEDREVERSE

在我们的示例中,我们将使用弱连接组件算法 (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 示例数据

© . All rights reserved.