管理
计算池
该应用程序包含多个计算池,可用于运行算法。当应用程序被激活时,这些计算池会由应用程序自动创建。每个计算池由其计算池选择器标识,该选择器映射到该池的实例系列。有关实例系列的更多信息,请参阅 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'
选择计算池
当调用算法作业时,会选择一个选择器来指定算法执行所在的池。例如,调用
CALL Neo4j_Graph_Analytics.graph.wcc('CPU_X64_XS', <configuration>)
将使用 CPU_X64_XS 池运行 WCC 算法。
多个算法可以在同一个计算池或不同的计算池中并行运行。
在内部,应用程序会启动一个作业服务来运行算法。作业服务在指定计算池内的计算节点上执行。算法完成后,作业服务将停止,如果池中没有其他作业运行,计算池将暂停。如果多个算法需要在同一个计算池中同时运行,建议调整池中的最小和最大节点数。
管理计算池
默认情况下,计算池以以下设置创建
-
min_nodes = 1
-
max_nodes = 1
-
auto_resume = true
-
auto_suspend_secs = 180
-
initially_suspended = true
因此,计算池在创建时处于暂停状态,并在没有算法运行时自动暂停以降低成本。这符合典型的按需运行使用模式。如果多个作业使用同一个计算池顺序运行,可以阻止自动暂停,以便使用活动节点并更快地启动作业。
`MONITOR` 和 `OPERATE` 权限授予 `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>);
应用程序仓库
应用程序会创建一个仓库,用于从消费者数据库读写数据。具体来说,该仓库用于在投影图时读取 Snowflake 表,并用于写入算法结果。它也用于管理查询和日志记录。
与计算池类似,该仓库配置了较短的自动暂停超时时间以降低成本。仓库的所有权限都授予了 app_admin 角色,以便管理员可以完全控制仓库。因此,预计管理员会在必要时根据工作负载的需求修改仓库。
仓库的名称是应用程序名称后跟 _app_warehouse
,即默认情况下为 Neo4j_Graph_Analytics_app_warehouse
。要检查仓库、其查询历史和性能,您可以在 Snowsight 的 Admin → Warehouses 下找到它。要配置它,请参阅 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_user 和 app_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 ALL PRIVILEGES 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>;
用户角色现在可以操作表,也可以删除它们。
事件共享
在应用程序安装过程中,您需要启用事件共享。此步骤是应用程序安装的强制要求,并确保您获得最佳支持体验。
请注意,下面我们使用默认应用程序名称 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 Products ⇒ Apps ⇒ Neo4j Graph Analytics 下查看事件共享设置,并选择 Events and logs 选项卡。