准备 ServiceNow® 实例¶
Snowflake Connector for ServiceNow® 受 Connector 条款 的约束。
安装 Snowflake Connector for ServiceNow® 之前,必须设置 ServiceNow 实例。
先决条件¶
完成以下步骤来设置 ServiceNow 实例:
确保 ServiceNow 实例公开可用。该连接器不适用于隐藏在 VPN 后面的实例。
确定包含您计划引入到 Snowflake 中的数据的 ServiceNow 表。
确定或创建用于该连接器的 ServiceNow 用户。
要连接到 ServiceNow 实例,该连接器必须作为 ServiceNow 用户向此实例进行身份验证。选择一个满足以下要求的 ServiceNow 用户:
用户名不能包含冒号 (
:
)。用户必须有权读取您计划引入的 ServiceNow 表中的所有记录。访问控制列表 (ACLs) 不能向此用户隐藏这些表中的任何记录。
用户必须有权读取以下表中的所有行,以便启用架构检测:
sys_db_object`(含 :code:`name
、super_class
、sys_id
字段)、sys_glide_object`(含 :code:`name
、scalar_type
、sys_id
字段)和sys_dictionary`(含 :code:`element
、internal_type
、name
、sys_id
字段)。用户必须有权读取
sys_table_rotation
表(含name
和sys_id
字段)中的所有行,以便该连接器可以使用正确的引入策略。用户必须有权访问以下表和日志表中的
sys_updated_on
字段:sys_db_object
、sys_glide_object
、sys_dictionary
、sys_table_rotation
。否则,系统将使用成本效益较低的截断和加载引入模式来加载这些表。备注
仅当用户是 交互式用户 (https://docs.servicenow.com/bundle/washingtondc-platform-administration/page/administer/users-and-groups/concept/c_NonInteractiveSessions.html) 时,才能通过向 ServiceNow 进行 OAuth 身份验证来配置 Snowsight 中的连接。如果为 ServiceNow 用户禁用了 Web service access only 设置,则该用户是交互式用户。
仅当您使用 SQL 命令配置连接时,才能将 OAuth 身份验证用于非交互式用户。在这种情况下,您无法使用 Snowsight 登录 ServiceNow 或获得 OAuth 刷新令牌。
如果您计划引入并同步的 ServiceNow 表含有
sys_updated_on
列,请在该列上设置索引。有关设置索引的信息,请参阅 ServiceNow 文档中的 创建表索引 (https://docs.servicenow.com/bundle/washingtondc-application-development/page/administer/table-administration/task/t_CreateCustomIndex.html)。通过用户界面创建索引后,索引的构建可能需要一些时间。索引构建过程作为后台任务运行。
如果实例含有大型表,Snowflake 建议联系 ServiceNow 客户支持部门,以询问为大型表构建索引的最佳方法。
(可选)如果您计划使用 OAuth 身份验证方法,并且将 只读角色 (https://docs.servicenow.com/bundle/washingtondc-platform-administration/page/administer/user-administration/concept/c_ReadOnlyRole.html) 分配给 ServiceNow 用户,请确保
glide.security.snc_read_only_role.tables.exempt_create
系统属性的值列表中包含oauth_credential
表。在
sys_properties
表中,创建或编辑glide.security.snc_read_only_role.tables.exempt_create
属性。有关编辑此属性的更多详细信息,请参阅 ServiceNow 知识库 (https://support.servicenow.com/kb?id=kb_article_view&sysparm_article=KB0783404)。要了解如何添加新的系统属性,请参阅 ServiceNow 文档中的 添加系统属性 (https://docs.servicenow.com/bundle/washingtondc-platform-administration/page/administer/reference-pages/reference/r_AvailableSystemProperties.html#t_AddAPropertyUsingSysPropsList)。
(可选)某些对于核心功能不重要的连接器过程使用 ServiceNow 端点
<service_now_instance>/<table_name>.do?SCHEMA
to retrieve table schemas. This endpoint requires theadmin
角色。有关此角色的更多信息,请参阅 ServiceNow 文档中的 基础系统角色 (https://docs.servicenow.com/bundle/washingtondc-platform-administration/page/administer/roles/reference/r_BaseSystemRoles.html)。如果使用没有此角色的用户配置连接器,则基于此端点的过程将无法执行。受影响的过程对此要求有适当的注释。(可选)要允许传播已删除的记录,请将
sys_audit_delete
表或自定义日志表用作已删除记录的信息源。备注
请注意,连接器必须能够访问所有日志表记录,否则安装可能会失败。而且,其他表中的记录删除可能不正确。
如果日志表的行被 ACLs 隐藏,连接器的行为将不可预测。即使安装成功,在后续过程中也可能无法正确同步某些删除操作。
要使用
sys_audit_delete
,请执行以下步骤:将
no_audit_delete
字典属性 (https://docs.servicenow.com/bundle/washingtondc-application-development/page/administer/reference-pages/concept/c_DictionaryAttributes.html) 设置为false
。确保该连接器的 ServiceNow 用户有权访问
sys_audit_delete
表,以及此表中的documentkey
、tablename
、sys_id
和sys_created_on
字段。
要使用自定义日志表,请执行以下步骤:
创建一个名为
snowflake_connector_journal
的日志表,使其包含名为documentkey
和tablename
的字符串列。确保该连接器的 ServiceNow 用户有权访问
snowflake_connector_journal
表,以及此表中的u_documentkey
、u_tablename
、sys_id
、sys_created_on
字段。创建一个名为
RecordChange
的脚本,使其包含以下代码:var RecordChange = Class.create(); RecordChange.prototype= { initialize :function() {}, captureChange :function(tableName, docID) { var changeCapture = new GlideRecord('u_snowflake_connector_journal'); changeCapture.initialize(); changeCapture.setValue('u_documentkey', docID); changeCapture.setValue('u_tablename', tableName); changeCapture.insert(); }, type :'RecordChange' };
定义一个业务规则,以获取记录的删除:
(function executeRule(current, previous /*null when async*/) { new RecordChange().captureChange(current.getTableName(), current.getUniqueValue()); })(current, previous);
对于要传播已删除记录的每个表,请将此业务规则配置为在删除记录后运行。
备注
该连接器仅能够同步经过审核的已删除记录。未调用 DBDelete.setWorkflow()
的删除操作不会引入到 Snowflake 中。
请参阅 ServiceNow 产品文档,以了解有关使用 DBDelete.setWorkflow()
的更多信息。
另请注意以下有关已删除记录的信息:
对于具有
no_audit_delete=true
字典属性的表,系统不会跟踪记录删除。默认情况下,系统不会跟踪带有
sys
前缀的表的记录删除。仅当引用字段位于已审核的表上时,该连接器才能引入通过级联记录删除来删除的记录。请参阅 ServiceNow 产品文档,以了解有关级联记录删除的更多信息。
后续步骤¶
完成以上过程后,请按照 使用 Snowsight 安装和配置连接器 或者 使用 SQL 命令安装和配置连接器 中的步骤操作。