准备 ServiceNow® 实例

Snowflake Connector for ServiceNow® 受 Connector 条款 的约束。

安装 Snowflake Connector for ServiceNow® 之前,必须设置 ServiceNow 实例。

先决条件

完成以下步骤来设置 ServiceNow 实例:

  1. 确保 ServiceNow 实例公开可用。该连接器不适用于隐藏在 VPN 后面的实例。

  2. 确定包含您计划引入到 Snowflake 中的数据的 ServiceNow 表。

  3. 确定或创建用于该连接器的 ServiceNow 用户。

    要连接到 ServiceNow 实例,该连接器必须作为 ServiceNow 用户向此实例进行身份验证。选择一个满足以下要求的 ServiceNow 用户:

    • 用户名不能包含冒号 (:)。

    • 用户必须有权读取您计划引入的 ServiceNow 表中的所有记录。访问控制列表 (ACLs) 不能向此用户隐藏这些表中的任何记录。

    • 用户必须有权读取以下表中的所有行,以便启用架构检测:sys_db_object`(含 :code:`namesuper_classsys_id 字段)、sys_glide_object`(含 :code:`namescalar_typesys_id 字段)和 sys_dictionary`(含 :code:`elementinternal_typenamesys_id 字段)。

    • 用户必须有权读取 sys_table_rotation 表(含 namesys_id 字段)中的所有行,以便该连接器可以使用正确的引入策略。

    • 用户必须有权访问以下表和日志表中的 sys_updated_on 字段:sys_db_objectsys_glide_objectsys_dictionarysys_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 刷新令牌。

  4. 如果您计划引入并同步的 ServiceNow 表含有 sys_updated_on 列,请在该列上设置索引。有关设置索引的信息,请参阅 ServiceNow 文档中的 创建表索引 (https://docs.servicenow.com/bundle/washingtondc-application-development/page/administer/table-administration/task/t_CreateCustomIndex.html)。

    通过用户界面创建索引后,索引的构建可能需要一些时间。索引构建过程作为后台任务运行。

    如果实例含有大型表,Snowflake 建议联系 ServiceNow 客户支持部门,以询问为大型表构建索引的最佳方法。

  5. (可选)如果您计划使用 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)。

  6. (可选)某些对于核心功能不重要的连接器过程使用 ServiceNow 端点 <service_now_instance>/<table_name>.do?SCHEMA to retrieve table schemas. This endpoint requires the admin 角色。有关此角色的更多信息,请参阅 ServiceNow 文档中的 基础系统角色 (https://docs.servicenow.com/bundle/washingtondc-platform-administration/page/administer/roles/reference/r_BaseSystemRoles.html)。如果使用没有此角色的用户配置连接器,则基于此端点的过程将无法执行。受影响的过程对此要求有适当的注释。

  7. (可选)要允许传播已删除的记录,请将 sys_audit_delete 表或自定义日志表用作已删除记录的信息源。

    备注

    请注意,连接器必须能够访问所有日志表记录,否则安装可能会失败。而且,其他表中的记录删除可能不正确。

    如果日志表的行被 ACLs 隐藏,连接器的行为将不可预测。即使安装成功,在后续过程中也可能无法正确同步某些删除操作。

    • 要使用 sys_audit_delete,请执行以下步骤:

      1. no_audit_delete 字典属性 (https://docs.servicenow.com/bundle/washingtondc-application-development/page/administer/reference-pages/concept/c_DictionaryAttributes.html) 设置为 false

      2. 确保该连接器的 ServiceNow 用户有权访问 sys_audit_delete 表,以及此表中的 documentkeytablenamesys_idsys_created_on 字段。

    • 要使用自定义日志表,请执行以下步骤:

      1. 创建一个名为 snowflake_connector_journal 的日志表,使其包含名为 documentkeytablename 的字符串列。

      2. 确保该连接器的 ServiceNow 用户有权访问 snowflake_connector_journal 表,以及此表中的 u_documentkeyu_tablenamesys_idsys_created_on 字段。

      3. 创建一个名为 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'
        };
        
        Copy
      4. 定义一个业务规则,以获取记录的删除:

        (function executeRule(current, previous /*null when async*/) {
            new RecordChange().captureChange(current.getTableName(), current.getUniqueValue());
        })(current, previous);
        
        Copy
      5. 对于要传播已删除记录的每个表,请将此业务规则配置为在删除记录后运行。

备注

该连接器仅能够同步经过审核的已删除记录。未调用 DBDelete.setWorkflow() 的删除操作不会引入到 Snowflake 中。

请参阅 ServiceNow 产品文档,以了解有关使用 DBDelete.setWorkflow() 的更多信息。

另请注意以下有关已删除记录的信息:

  • 对于具有 no_audit_delete=true 字典属性的表,系统不会跟踪记录删除。

  • 默认情况下,系统不会跟踪带有 sys 前缀的表的记录删除。

  • 仅当引用字段位于已审核的表上时,该连接器才能引入通过级联记录删除来删除的记录。请参阅 ServiceNow 产品文档,以了解有关级联记录删除的更多信息。

后续步骤

完成以上过程后,请按照 使用 Snowsight 安装和配置连接器 或者 使用 SQL 命令安装和配置连接器 中的步骤操作。

语言: 中文