管理

计算池 (Compute pools)

该应用程序包含多个计算池,可用于运行算法。当应用程序被激活时,这些计算池由应用程序自动创建。计算池由其计算池选择器标识,该选择器映射到该池的实例系列。有关实例系列的更多信息,请参阅 Snowflake 文档中的 CREATE COMPUTE POOL

在本节中,我们假设应用程序名称为默认的 Neo4j_Graph_Analytics。如果您在安装过程中选择了其他应用程序名称,请将其替换。

您可以通过运行以下命令查看可用的计算池选择器

CALL Neo4j_Graph_Analytics.graph.show_available_compute_pools();

只要消费者区域支持相应的实例系列,以下计算池选择器即为可用

  • 'CPU_X64_XS'

  • 'CPU_X64_M'

  • 'CPU_X64_L'

  • 'HIGHMEM_X64_S'

  • 'HIGHMEM_X64_M'

  • 'HIGHMEM_X64_L'

  • 'GPU_NV_S'

  • 'GPU_NV_XS'

  • 'GPU_GCP_NV_L4_1_24G'

选择计算池

当调用算法作业时,会选择一个选择器来指定执行算法的池。例如,调用

CALL Neo4j_Graph_Analytics.graph.wcc('CPU_X64_XS', <configuration>)

将使用 CPU_X64_XS 池运行 WCC 算法。

多个算法可以在同一个计算池或不同的计算池上并行运行。

在内部,应用程序启动一个 作业服务 (job service) 来运行算法。该作业服务在指定计算池内的计算节点上执行。算法完成后,作业服务停止;如果池中没有其他正在运行的作业,则计算池将挂起。如果需要在同一个计算池上同时运行多个算法,建议调整池中节点的最小和最大数量。

管理计算池

默认情况下,计算池创建时的设置如下

  • min_nodes = 1

  • max_nodes = 1

  • auto_resume = true

  • auto_suspend_secs = 180

  • initially_suspended = true

因此,计算池在创建时处于挂起状态,并且在没有算法运行时会自动挂起以降低成本。这符合典型的按需运行使用模式。如果使用同一个计算池连续运行多个作业,则可以防止自动挂起,从而使用活动节点并使作业启动更快。

MONITOROPERATE 权限已授予 APP_ADMIN 角色。检查内部池的当前状态需要这些权限。

不允许直接更改计算池。相反,应用程序向管理员角色公开了一组存储过程来管理计算池设置

-- Use a role that is granted the Neo4j_Graph_Analytics.app_admin role
USE ROLE <app_admin_role>;
-- Get the current min_nodes setting of the given pool selector
CALL Neo4j_Graph_Analytics.admin.get_min_nodes(<pool_selector>);
-- Set the min_nodes setting of the given pool selector
CALL Neo4j_Graph_Analytics.admin.set_min_nodes(<pool_selector>, <min_nodes>);
-- Get the current max_nodes setting of the given pool selector
CALL Neo4j_Graph_Analytics.admin.get_max_nodes(<pool_selector>);
-- Set the max_nodes setting of the given pool selector
CALL Neo4j_Graph_Analytics.admin.set_max_nodes(<pool_selector>, <max_nodes>);

应用程序仓库 (Application warehouse)

应用程序会创建一个仓库,用于从消费者数据库读取数据以及向其写入数据。具体来说,该仓库用于在投影图时读取 Snowflake 表,并用于写入算法结果。它还用于管理查询和日志记录。

与计算池类似,该仓库配置了较短的自动挂起超时时间以降低成本。仓库上的所有权限均授予 app_admin 角色,以便管理员对仓库拥有完全控制权。因此,如果认为有必要,管理员应根据工作负载需求随时修改仓库配置。

仓库名称为应用程序名称后跟 _app_warehouse,即默认情况下为 Neo4j_Graph_Analytics_app_warehouse。要检查仓库及其查询历史记录和性能,您可以在 Snowsight 的 AdminWarehouses 下找到它。如需配置,请参阅 https://docs.snowflake.com/en/sql-reference/sql/alter-warehouse

表访问权限

必须授予应用程序读取要运行算法的表的权限。如果提前知道表或表所属的架构,则可以在设置期间一次性授予所需的权限。否则,对于您可能希望运行算法的其他表或架构,必须在稍后重复授予读取权限的操作。

在下面的示例中,我们将授予应用程序对单个架构中所有表的读取权限,并对可能不同的架构授予写入权限。如果您需要多个架构,则需要为这些架构重复授予权限。这些授权使得运行使用这些架构进行读写的作业成为可能。根据需要插入角色和数据库对象的名称。如果您不使用默认的应用程序名称 Neo4j_Graph_Analytics,请将其替换为您在安装期间使用的名称。

-- Use a role with the required privileges, like 'ACCOUNTADMIN'
USE ROLE <privileged_role>;

-- Grant access to consumer data
-- The application reads consumer data to build a graph object, and it also writes results into new tables.
-- We therefore need to grant the right permissions to give the application access.
GRANT USAGE ON DATABASE <database_name> TO APPLICATION Neo4j_Graph_Analytics;
GRANT USAGE ON SCHEMA <database_name>.<schema_name> TO APPLICATION Neo4j_Graph_Analytics;

-- Required to read tabular data into a graph
GRANT SELECT ON ALL TABLES IN SCHEMA <database_name>.<schema_name> TO APPLICATION Neo4j_Graph_Analytics;
-- Required to write computation results into a table
GRANT CREATE TABLE ON SCHEMA <database_name>.<write_schema_name> TO APPLICATION Neo4j_Graph_Analytics;

未来表和视图的权限

上一节中授予应用程序的权限允许其读取给定架构中的*现有*表。可能还需要允许应用程序读取架构中的*未来*表。遗憾的是,SELECT ON FUTURE TABLES 不能直接授予应用程序。但是,Snowflake 提供了我们可以用来解决此问题的数据库角色

首先,我们需要创建一个拥有所需权限的数据库角色。

CREATE DATABASE ROLE <database_role>;

-- Grants needed for reading existing consumer data stored in tables and views.
GRANT SELECT ON ALL TABLES IN SCHEMA <database_name>.<schema_name> TO DATABASE ROLE <database_role>;
GRANT SELECT ON ALL VIEWS IN SCHEMA <database_name>.<schema_name> TO DATABASE ROLE <database_role>;
-- Grants needed for reading future consumer data stored in tables and views.
GRANT SELECT ON FUTURE TABLES IN SCHEMA <database_name>.<schema_name> TO DATABASE ROLE <database_role>;
GRANT SELECT ON FUTURE VIEWS IN SCHEMA <database_name>.<schema_name> TO DATABASE ROLE <database_role>;
-- Grants needed for writing computation results into tables.
GRANT CREATE TABLE ON SCHEMA <database_name>.<schema_name> TO DATABASE ROLE <database_role>;

将权限分配给数据库角色后,我们需要将数据库角色分配给应用程序。请注意,这是一个预览功能,可能并非在所有 Snowflake 区域或账户中都可用。

-- Assuming the default name of 'Neo4j_Graph_Analytics' for the application
GRANT DATABASE ROLE <database_role> TO APPLICATION Neo4j_Graph_Analytics;

现在,在给定架构中创建的任何表和视图都将可供应用程序访问。

消费者角色和权限

应用程序附带两个应用程序角色:app_userapp_admin

app_user 角色提供对所有算法过程和实用程序函数的访问权限。app_admin 角色提供管理查询仓库以及监控和操作计算池的权限。

在下面的示例中,我们创建了两个新的消费者角色,一个用于用户,一个用于管理员。我们将相应的应用程序角色的使用权授予这些消费者角色。然后,可以根据用户与应用程序的交互方式将消费者角色授予用户。

如果您不使用默认的应用程序名称 Neo4j_Graph_Analytics,请将其替换为您在安装期间使用的名称。尖括号内的角色应替换为具体的名称。

-- Use a role with the required privileges, like 'ACCOUNTADMIN'
USE ROLE <privileged_role>;

-- Create a consumer role for users of the Graph Analytics application
CREATE ROLE IF NOT EXISTS <consumer_user_role>;
GRANT APPLICATION ROLE Neo4j_Graph_Analytics.app_user TO ROLE <consumer_user_role>;
-- Create a consumer role for administrators of the Graph Analytics application
CREATE ROLE IF NOT EXISTS <consumer_admin_role>;
GRANT APPLICATION ROLE Neo4j_Graph_Analytics.app_admin TO ROLE <consumer_admin_role>;

消费者对未来表的权限

许多算法会创建包含算法结果的新表。为了能够立即访问这些表,而无需在每次算法运行后进行特殊授权,授予未来表的权限非常有用。以下 SQL 语句可实现此目的。

GRANT USAGE ON DATABASE <database_name> TO ROLE <consumer_user_role>;
GRANT USAGE ON SCHEMA <database_name>.<schema_name> TO ROLE <consumer_user_role>;
GRANT SELECT ON FUTURE TABLES IN SCHEMA <database_name>.<schema_name> TO ROLE <consumer_user_role>;

应用程序创建的任何表均由应用程序所有。上述查询不会转移表的所有权。但是,如果需要,我们可以使用 GRANT OWNERSHIP 命令将表的所有权转移给消费者角色。

GRANT OWNERSHIP ON FUTURE TABLES IN SCHEMA <database_name>.<schema_name> TO ROLE <consumer_user_role>;

用户角色现在可以对这些表进行操作,也可以删除它们。

事件共享

在安装应用程序期间,您需要启用事件共享。此步骤对于应用程序的安装是强制性的,并确保您获得最佳的支持体验。

有关事件共享的更多信息,请参阅 https://other-docs.snowflake.com/en/native-apps/consumer-enable-logging

请注意,我们在下方使用了默认的应用程序名称 Neo4j_Graph_Analytics。如果您在安装过程中选择了其他应用程序名称,请将其替换。

查看应用程序中的遥测事件定义

SHOW TELEMETRY EVENT DEFINITIONS IN APPLICATION Neo4j_Graph_Analytics;

如果意外禁用了事件共享,请重新启用它

ALTER APPLICATION Neo4j_Graph_Analytics SET AUTHORIZE_TELEMETRY_EVENT_SHARING = true;

启用强制和可选事件类型(例如指标)的事件共享

ALTER APPLICATION Neo4j_Graph_Analytics SET SHARED TELEMETRY EVENTS('SNOWFLAKE$ALL');

或者,在 Snowsight 的 Data ProductsAppsNeo4j Graph Analytics 下查看事件共享设置,然后选择 Events and logs 选项卡。

日志记录

应用程序中运行的每个作业都会输出日志信息。可以使用作业完成后返回的 jobId 访问特定作业的日志。由于作业是在 Snowflake 作业服务中执行的,因此 Snowflake 将在作业完成后清理环境。这意味着作业日志仅在作业完成后的一段时间内可用。

要访问作业日志,可以使用以下 SQL 命令

CALL Neo4j_Graph_Analytics.graph.job_log('job_119ac4370ae94f1da998fe7c296a6a25');

应用程序的默认日志级别为 INFO。使用 runtime 配置键,可以在运行作业时更改日志级别。

例如,要为单个算法执行将日志级别设置为 DEBUG,可以使用以下配置

CALL Neo4j_Graph_Analytics.graph.wcc('CPU_X64_M', {
    'project':  ...,
    'compute':  ...,
    'write':    ...,
    'runtime': { 'logging': { 'level': 'DEBUG' } }
);

日志级别可以设置为以下值之一:DEBUGINFOWARNERRORFATAL