Set up data ingestion for your ServiceNow® data

本主题介绍如何为 Snowflake Connector for ServiceNow® 设置数据引入。

备注

Snowflake Connector for ServiceNow® 将 ServiceNow® 表中的数据引入到 Snowflake 中。数据引入依靠 ServiceNow® 表 API (https://developer.servicenow.com/dev.do#!/reference/api/latest/rest/c_TableAPI) 的 v2

本主题内容:

Strategies for ingesting ServiceNow® tables

备注

  • 连接器只能引入包含 sys_id 列的表。

  • ServiceNow 视图 (https://docs.servicenow.com/bundle/washingtondc-application-development/page/use/reporting/concept/c_DatabaseViews.html) 不受支持。您不应引入这些视图,而应同步基础视图的所有表,并在 Snowflake 中联接同步的表。

连接器使用不同的引入策略,具体取决于表架构。连接器使用三种引入模式:

  • 为表启用同步时,每个表都会进行数据的 初始加载

    In this mode, the table is ingested by iterating through the records identified by the IDs in the sys_id column. When all records are ingested, the initial load phase is complete. For certain tables, you can also set the data range start time value which can restrict which records are ingested.

  • 增量更新 只会在具有 sys_updated_onsys_created_on 列的表中进行。

    Incremental updates begin after the initial load is done and occur on a regular schedule that you can configure. In this mode, the connector ingests only the records that were added, updated, or deleted since the last synchronization.

备注

有关删除的信息来自连接器配置期间提供的日志表。

  • For tables that don't have sys_updated_on or sys_created_on columns, the connector uses the truncate and load mode.

    在此模式下,会始终使用初始加载方法引入表,新引入的数据将替换旧数据。连接器通过运行 INSERT OVERWRITE 命令来替换数据。

备注

  • 在“增量更新”模式下,连接器会使用 sys_updated_on 列(如果该列存在)。

    如果上述列不存在,则连接器将改用 sys_created_on 列。

  • 对于 旋转表 (https://docs.servicenow.com/bundle/washingtondc-platform-administration/page/administer/platform-performance/concept/c_TableRotation.html),连接器始终会使用 sys_created_on 列。如果使用 sys_created_on 以外的列,则引入该表可能会导致性能问题。

备注

  • 如果在 ServiceNow 中修改记录时未更新 sys_updated_onsys_created_on 字段,则这些修改不会同步到 Snowflake,这会导致数据不一致。Snowflake 建议您避免 禁用系统字段更新 (https://developer.servicenow.com/dev.do#!/reference/api/washingtondc/server_legacy/c_GlideRecordAPI%23r_GlideRecord-autoSysFields_Boolean)。

  • 如果记录删除 未经过审核 (https://developer.servicenow.com/dev.do#!/reference/api/washingtondc/server_legacy/c_GlideRecordAPI#r_GlideRecord-setWorkFlow_Boolean),则有关已删除记录的信息不会同步到 Snowflake,从而导致数据不一致。

备注

由于 Snowflake 和 ServiceNow® REST APIs 受到的限制,如果单行数据超过 128 MB,则连接器无法引入表。在这种情况下,连接器会尝试使用表计划中定义的频率引入数据。如果某一行超过限制,连接器将生成错误消息并继续引入其他表。为了克服此限制,您可以配置 列筛选 来排除大型列引入。

存档的记录

对于引入的表,连接器不会在 Snowflake 一端主动反映 ServiceNow 中存档的记录 (https://docs.servicenow.com/bundle/washingtondc-platform-administration/page/administer/database-rotation/concept/c_ArchiveData.html)。假设您存档了早于特定日期的非活动记录,则适用以下内容:

  • 在连接器引入之前(例如,在表 初始加载 之前)存档的任何记录都不会出现在 Snowflake 一端的表中。

  • 任何在连接器引入后存档的记录仍保留在 Snowflake 一端,不会显示存档操作。

  • 对于已在 增量更新 模式下运行的表,所恢复的任何存档记录都不会在 Snowflake 端引入,除非该记录后续也发生了修改(其 sys_updated_on 值更新为当前时间)。

  • 在表的 初始加载 过程中恢复的存档记录可能会在 Snowflake 一端引入,具体取决于其在 sys_id 列中的 ID。

如果要更新有活动存档规则的表,可以 重新加载整个表,但重新加载完成后存档或回复的任何记录都将遵循上述原则。

可以启用 ServiceNow 存档表 ar_[table_name] 以执行同步。但此类表 初始加载 后的第一次 增量更新 将搜索存档表 初始加载 开始日期之后创建/更新的记录。因为当记录存档时,sys_updated_onsys_created_on 都不会被修改,在 Snowflake 一端,在存档表 初始加载 到某个时间点后存档的记录会丢失。例如,如果存档记录的时间超过一年,则存档表 初始加载 后存档一年的任何记录都不会引入到 Snowflake 一端的存档表中。在 初始加载 存档表后,通过 销毁规则 (https://docs.servicenow.com/bundle/washingtondc-platform-administration/page/administer/database-rotation/task/t_CreateADestructionRule.html) 恢复或删除的存档记录在 Snowflake 一端永远不会从中删除。

并行引入 ServiceNow® 表

连接器可并行引入数个表,但各个表的引入会同时进行。这意味着引入大型表可能会阻碍连接器更新其他表。与其他阶段相比,此问题更有可能发生在初始加载阶段。默认情况下,连接器使用 10 个工作线程,这被认为是不使 ServiceNow® 实例过载的最佳值。如果您确定实例可以支持更多并发,则可以通过调用 CONFIGURE_CONCURRENCY 程序 将此值增加到最大值 30。

使用 Snowsight 设置数据引入

要使用 Snowsight 设置数据引入,请执行以下步骤:

  1. Sign in to Snowsight as a user with the ACCOUNTADMIN role.

  2. In the navigation menu, select Catalog » Apps.

  3. 搜索 Snowflake Connector for ServiceNow® 英语程序,然后选择连接器的磁贴。

  4. Snowflake Connector for ServiceNow® 页面中,选择 Data Sync 选项卡。

    这会显示包含所有 ServiceNow® 表的列表。

    备注

    连接器只能引入包含 sys_id 列的表。

  5. 选择要引入的表:

    1. 搜索要引入的表。

    2. 在要选择的表左侧,选择 Status 列中的复选框。

    3. Sync Schedule 下方,选择要在 Snowflake 和 ServiceNow® 之间同步表的频率。

    4. 对要引入 Snowflake 的每个表重复这些步骤。

  6. 选择 Status 列的标题来查看您当前选择的表。

  7. 选择 Start sync 可开始将数据引入 Snowflake 账户。

连接器状态将变更为 Syncing data。至少成功引入一个表时,连接器状态将变更为 Last Sync: just now

有关如何在 Snowflake 中查看表内容的信息,请参阅 监控 Snowflake Connector for ServiceNow®

使用 Snowsight 修改数据引入

要修改要引入的 ServiceNow® 表或该表的同步计划,请执行以下步骤:

  1. Sign in to Snowsight as a user with the ACCOUNTADMIN role.

  2. In the navigation menu, select Catalog » Apps.

  3. 搜索 Snowflake Connector for ServiceNow® 英语程序,然后选择连接器的磁贴。

  4. Snowflake Connector for ServiceNow® 页面中,选择 Data Sync

  5. 选择 Edit tables 按钮进入编辑模式。

  6. 修改要引入的表:

    1. 搜索要引入的表。

    2. 在要选择或取消选择的表左侧,选中 Status 列中的复选框。

    3. Sync Schedule 下方,选择要在 Snowflake 和 ServiceNow® 之间同步表的频率。

  7. 选择 Update data sync

使用 SQL 语句设置数据引入

要使用 SQL 语句设置数据引入,请执行以下操作:

备注

若要配置这些设置,请使用在 用作连接器实例的数据库 PUBLIC 架构中定义的存储过程

在调用这些存储过程之前,选择该数据库作为会话使用的数据库。

例如,如果该数据库名为 my_connector_servicenow,请运行以下命令:

USE DATABASE my_connector_servicenow;
Copy

启用或禁用表同步

本节介绍如何启用或禁用 ServiceNow® 中的表同步。可以使用默认配置和自定义配置来启用同步。

使用默认配置启用多个表

若要启用 ServiceNow® 中至少一个表的数据同步,请使用以下实参调用 ENABLE_TABLES 存储过程:

CALL ENABLE_TABLES(<tables_to_enable>);
Copy

其中:

tables_to_enable

指定 ServiceNow® 表名称数组。

Use the table name, not the label displayed in the ServiceNow® UI. You can find the table name in the data dictionary tables in ServiceNow (https://docs.servicenow.com/bundle/washingtondc-application-development/page/administer/managing-data/concept/c_DataDictionaryTables.html). In the ServiceNow® UI, go to System Definition » Tables. The Name column displays the name of the table.

例如,要为名称为 table1table2table3 的表启用同步,请运行以下命令:

CALL ENABLE_TABLES(['table1', 'table2', 'table3']);
Copy

禁用多个表

若要禁用 ServiceNow® 中特定表的表数据同步,请使用以下实参调用 DISABLE_TABLES 存储过程:

CALL DISABLE_TABLES(<tables_to_disable>);
Copy

其中:

tables_to_disable

指定 ServiceNow® 表名称数组。

Use the table name, not the label displayed in the ServiceNow® UI. You can find the table name in the data dictionary tables in ServiceNow (https://docs.servicenow.com/bundle/washingtondc-application-development/page/administer/managing-data/concept/c_DataDictionaryTables.html). In the ServiceNow® UI, go to System Definition » Tables. The Name column displays the name of the table.

例如,要为名称为 table1table2 的表禁用同步,请运行以下命令:

CALL DISABLE_TABLES(['table1', 'table2']);
Copy

禁用该表会尽快停止其同步。重新启用表同步后,将从暂停的位置开始恢复引入。

备注

禁用所有表同步并不意味着 Snowflake Connector for ServiceNow® 会停止产生费用。后台任务(例如与通知相关的任务)可以继续执行。

ENABLE_TABLESDISABLE_TABLES 过程会将指定的表名称添加到 CONFIGURED_TABLES 视图中。

备注

连接器不支持 ServiceNow® 中的 回滚或删除恢复内容 (https://docs.servicenow.com/bundle/washingtondc-application-development/page/administer/table-administration/concept/rollback-delete-recovery.html)。

使用“回滚和删除恢复内容”功能可能会导致数据不一致。在 ServiceNow® 中恢复的记录可能仍会在 Snowflake 中标记为已删除。要解决此问题,您可以 重新加载 表。

使用自定义配置启用单个表

  • 若要使用自定义配置启用 ServiceNow® 中特定表的数据同步,请使用以下实参调用 ENABLE_TABLE 存储过程:

    CALL ENABLE_TABLE('<table_to_enable>', <table_config>);
    
    Copy

    其中:

    table_to_enable

    指定 ServiceNow® 表名称。

    table_config

    Optional: Specifies an object with table ingestion configuration. If not specified, table ingestion uses the default configuration.

    目前支持的配置有:

    备注

    All of the custom configurations can be combined in a single object and used simultaneously for a single table ingestion.

    Example:

    sys_audit 具有以下配置:

    • The table should be synchronized every Saturday at 10:00 AM UTC.

    • Only the columns newvalue and reason should be ingested.

    • Only the rows that have the newvalue column starting with the string privacy should be ingested.

    • If a journal table is configured, deletions shouldn't be synchronized.

    • Display values should be fetched for all fields.

    To enable ingestion of the table, run the following command:

    CALL ENABLE_TABLE('sys_audit', {
      'schedule': { 'type': 'custom', 'value': { 'hour': 10, 'day_of_week': '6' } },
      'include_columns': ['newvalue', 'reason'],
      'row_filter': 'newvalue STARTSWITH "privacy"',
      'sync_deletions': false,
      'fetch_display_values': true
    });
    
    Copy

使用列筛选启用单个表

如果不需要 Snowflake 中的 ServiceNow® 表的所有列,连接器可以忽略。例如,如果单行超过行大小上限 128 MB,请跳过这些列。

若要允许引入包含指定列的表,请运行以下命令:

CALL ENABLE_TABLE('<table_to_enable>', <table_config>);
Copy

其中:

table_to_enable

指定 ServiceNow® 表名称。

table_config

对象包括带有列名称列表的 include_columnsexclude_columns 属性。如果有 sys_idsys_created_onsys_updated_on,则始终包含它们。您不必将其添加到 included_columns 数组中,也不能使用 excluded_columns 将其排除,因为连接器会在引入过程中使用它们。

备注

由于 ServiceNow® 中的列以小写字母编写,而连接器使用的 API 区分大小写,因此,为指定列提供的值也必须为小写。

备注

您不应同时提供 include_columnsexclude_columns。如果要列出 include_columns,则应跳过 exclude_columns 属性,反之亦然。如果两个数组均非空,并且没有任何冲突的列,则 include_columns 优先于 exclude_columns

如果 include_columnsexclude_columns 均为空数组,则所有可用列都将被引入。

例如,一个名为 u_table 的 ServiceNow® 表具有 sys_idsys_updated_oncol_1col_2 列,且执行以下语句:

CALL ENABLE_TABLE('u_table', { 'include_columns': ['sys_id', 'sys_updated_on'] });
Copy

此时,将仅为给定表引入 sys_idsys_updated_on 列;但如果调用以下内容:

CALL ENABLE_TABLE('u_table', { 'exclude_columns': ['col_1'] });
Copy

则会引入 sys_idsys_updated_oncol_2

连接器将验证所提供的列,如果 ServiceNow® 中没有任何可用列,则会拒绝启用请求。ServiceNow® API 仅支持包含模式。因此,连接器将提供的列数组转换为包含的列列表,并将其与每个请求一起发送到 ServiceNow®。ServiceNow® 可能会因为带包含的列的 URL 太长而无法处理。在调用 ENABLE_TABLE 时,连接器会验证此限制。

可以在 CONFIGURED_TABLES 视图的 INCLUDED_COLUMNS 列中找到每个表的列配置。若要修改所引入列的列表,需要先禁用特定表。如果为表配置了列筛选,则只能使用 ENABLE_TABLE 过程启用表。您不能使用 ENABLE_TABLES,它接受表列表作为实参。

展平视图仅包含启用表时指定的列。每次所包含列的列表发生变更时,视图都会更新。如果未配置列筛选,视图将包含所有可用的列。

备注

配置改变不会影响之前引入的数据。列筛选仅适用于新引入的记录。要将筛选器应用于之前引入的数据,需要 重新加载 表。

使用行筛选启用单个表

您可以通过指定筛选器条件,排除从 ServiceNow® 表指定行引入的数据。例如,排除 Snowflake 中包含您不想要的敏感数据的行,或者排除包含不必要数据的行以降低成本。

若要允许引入包含指定行筛选器的表,请运行以下命令:

CALL ENABLE_TABLE('<table_to_enable>', <table_config>);
Copy

其中:

table_to_enable

指定 ServiceNow® 表名称。

table_config

对象包括带筛选器表达式的 row_filter 属性,该表达式是一个有效字符串。

目前支持的筛选器运算符为:

运算符

描述

示例

AND

连接条件的逻辑运算符,表示两个条件都必须满足。

active = "true" AND impact = "2"

OR

连接条件的逻辑运算符,表示至少必须满足一个条件。

重要

优先于 AND 运算符。请参阅以下 示例

tablename = "incident" OR tablename = "problem"

=

Returns true if the values are equal.

priority = "1"

!=

Returns true if the values are not equal.

state != "7"

LIKE

Returns true if the value contains the specified character sequence. [1]

newvalue LIKE "privacy"

NOT LIKE

Returns true if the value doesn't contain a specified character sequence. [1]

description NOT LIKE "test"

STARTSWITH

Returns true if the value starts with the specified character sequence. [1]

description STARTSWITH "important"

ENDSWITH

Returns true if value ends with specified character sequence. [1]

description ENDSWITH "important"

IN

Returns true if the value is equal to any of the list of values. [2]

tablename IN ("incident", "task", "cmdb_ci")

NOT IN

Returns true if the value is not equal to any of the list values. [2]

status NOT IN ("in progress", "on hold", "cancelled")

[1] - fields must be of string data type.

[2] - choice fields must contain strings.

筛选器表达式规则和限制:

  • 任何两个筛选器表达式必须使用 ANDOR 运算符进行连接。

  • 运算符必须用空格隔开,并且必须大写。

  • 值表达式必须放在双引号内。

  • 表达式区分大小写。

  • 表达式在 sys_idsys_updated_onsys_created_on 列上无法运算。

备注

配置更改不会影响之前引入的数据。行筛选仅适用于新引入的记录。要将筛选器应用于已经引入的数据,必须 重新加载 表。

示例

  • 启用表 sys_audit 的引入,但仅同步 INCIDENT 表中与隐私事件相关的行,执行:

CALL ENABLE_TABLE('sys_audit', {
  'row_filter': 'tablename = "incident" AND fieldname = "cause" AND newvalue LIKE "privacy"'
});
Copy
  • 启用表 incident 的引入,但仅同步以下条件下的行:

    • active 字段等于 true

    • sys_created_by 字段以 support 开头或以 admin 结尾,

    • category 字段为 NetworkCloud Management

    执行:

CALL ENABLE_TABLE('incident', {
  'row_filter': 'active = "true" AND sys_created_by STARTSWITH "support" OR sys_created_by ENDSWITH "admin" AND category IN ("Network", "Cloud Management")'
});
Copy
  • 启用表 incident 的引入,但仅引入指定事件状态的行和给定的列,执行:

CALL ENABLE_TABLE('incident', {
  'row_filter': 'incident_state IN ("1", "2", "3")', -- "New", "In Progress", "On Hold"
  'include_columns': ['incident_state', 'description']
});
Copy

指定同步计划

Snowflake Connector for ServiceNow® 会按指定计划将所有 ServiceNow® 表中的数据同步至 Snowflake。默认情况下,所有表每小时 (1h) 同步一次。

若要更改所有表的默认同步计划,请使用以下实参调用 CONFIGURE_DATA_INGESTION_SCHEDULE 存储过程:

CALL CONFIGURE_DATA_INGESTION_SCHEDULE(<schedule>);
Copy

其中:

schedule

指定同步的频率。您可以指定以下 JSON 值中的一个:

  • { 'type': 'continuous' },这是近实时引入计划。具有此同步计划的表使用专用的处理器来引入数据,并且不计入可以并行同步的最大表数。有关更多信息,请参阅 缩放连接器。您可以使用连续计划配置最多 20 个表。

    警告

    使用连续计划的表会导致 ServiceNow® 实例的负载增加。此外,它会导致连接器仓库持续使用,从而增加仓库的 Credit 使用量。Snowflake 建议谨慎使用连续计划,并且仅适用于需要在 Snowflake 中提供近实时数据的表。为了防止 ServiceNow® 实例过载,连接器实施了一种检测机制,能够自动禁用采用连续计划的失败的表。有关更多信息,请参阅 连接器禁用了使用连续计划的表

  • { 'type': 'interval', 'value': '<interval_value>' },其中 interval_value 为以下字符串值中的一个:

    • '30m'

    • '1h'

    • '3h'

    • '6h'

    • '12h'

    • '1d'

  • { 'type': 'custom', 'value': { 'hour': <hour>, 'day_of_week': '<day_of_week>' } },其中使用 hour 来指定应开始引入时的 UTC 时区小时数,并使用 day_of_week 指定应执行引入时是星期几。可以使用特殊表达式来表示是星期几:

    • '*' 表示每天运行引入。

    • '1-3' 表示从星期一到星期三运行引入。

    • '0,5,6' 表示在星期五、星期六和星期日运行引入。

    可用于 day_of_week 配置表达式的可能值为:

    • '0' – 星期日

    • '1' – 星期一

    • '2' – 星期二

    • '3' – 星期三

    • '4' – 星期四

    • '5' – 星期五

    • '6' – 星期六

    不支持其他非数字值,例如使用 '5L' 指示每月的最后一个星期五或使用 'FRI-SUN' 指示从星期五到星期日的范围。

在启用过程中,可以为特定表配置引入计划。要启用单个表并设置其引入计划,请使用以下实参调用 ENABLE_TABLE 存储过程:

CALL ENABLE_TABLE('<table_name>', <table_config>);
Copy

其中:

table_name

指定要启用的 ServiceNow® 表名称。

table_config

对象包括 schedule 属性,指定表同步的配置。请查看 CONFIGURE_DATA_INGESTION_SCHEDULE 存储过程的 schedule 以了解详细信息。

例如,要启用表 table_1 的引入并且每 3 小时同步一次数据,请调用以下存储过程:

CALL ENABLE_TABLE('table_1', { 'schedule': { 'type': 'interval', 'value': '3h' } });
Copy

连接器还允许您为启用了同步的表指定不同的计划。若要变更一组选定的表的同步计划,请使用以下实参调用 CONFIGURE_TABLES_SCHEDULE 存储过程:

CALL CONFIGURE_TABLES_SCHEDULE(<table_names>, <schedule>);
Copy

其中:

table_names

指定要配置同步计划的表名称数组。

schedule

指定同步的频率。请查看 CONFIGURE_DATA_INGESTION_SCHEDULE 存储过程的 schedule 以了解详细信息。

例如,若要在每个星期六和星期日的 11:00 PM (UTC) 引入表 table_1table_2,则调用以下存储过程:

CALL CONFIGURE_TABLES_SCHEDULE(['table_1', 'table_2'], { 'type': 'custom', 'value': { 'hour': 23, 'day_of_week': '0,6' } });
Copy

默认情况下,连接器会尝试在计划开始时间起的 3 小时内开始引入。如果无法在该时间范围内开始引入(例如,连接器在引入其他表),则不会执行当前运行计划。连接器会尝试在下一个计划时间范围引入。可以通过调用 CONFIGURE_CUSTOM_SCHEDULE_START_INGESTION_WINDOW 存储过程来更改时间范围的持续时间:

CALL CONFIGURE_CUSTOM_SCHEDULE_START_INGESTION_WINDOW(<window_length>);
Copy

其中,window_length 是 ISO 8601 持续时间格式的时间窗口长度。持续时间必须向上取整到下一个整小时,并且必须至少持续 1 小时。例如,值 'PT12H' 指定的是持续 12 小时的时间窗口,'P2D' 指定的则是持续 2 天的时间窗口。

如果仅启用使用自定义计划的表,则此配置只会影响为已配置表创建和刷新展平视图所需的时间。满足以下条件后,将在首个引入周期中创建展平视图:

  • 已完成元数据表的引入

  • 已开始已配置表的引入。

如果启用了电子邮件警报,Snowflake 建议在使用自定义计划时将警报频率更改为 Once per day

指定是否应同步删除

您可以指定连接器是否应将删除从 ServiceNow® 同步到Snowflake。默认情况下,如果配置了日志表,连接器会同步删除操作。然而,您可能想要禁用特定表的删除同步,而不更改全局配置。

要启用具有指定删除同步设置的表引入,请运行以下命令:

CALL ENABLE_TABLE('<table_to_enable>', <table_config>);
Copy

其中:

table_to_enable

指定 ServiceNow® 表名称。

table_config

包含 sync_deletions 布尔属性的对象。如果值设置为 true,则连接器会同步表的删除;如果值设置为 false,则连接器不会同步表的删除。

例如,要启用表 incident 的引入,但不同步删除,请运行以下命令:

CALL ENABLE_TABLE('incident', { 'sync_deletions': false });
Copy

备注

如果您想使用默认配置,请不要在配置对象中提供 sync_deletions 属性。如果未配置日志表,则连接器不会同步删除,无论提供的配置如何。

指定是否应提取显示值

连接器可以获取 ServiceNow® 中任何支持类型字段的显示值。显示值是可读值,它们对应于存储在数据库中的实际值,例如,一个值为 1 的字段的显示值可能为 High。要了解更多关于显示值的信息,请参阅 ServiceNow® 文档 (https://www.servicenow.com/docs/bundle/xanadu-platform-administration/page/administer/field-administration/concept/c_DisplayValues.html)。

解析后的值以扁平化视图显示在一个单独的列中,后缀为 __DISPLAY_VALUE。连接器使用 Snowflake 类型创建文本和布尔列,但对于其他类型,例如不同可能格式的数字或日期值,显示值作为变体存储。

警告

不支持将元数据表用于提取显示值。

备注

配置更改不会影响之前引入的数据。显示值提取仅适用于新引入的记录。要获取已引入数据的显示值,必须 重新加载 表。

每个表的显示值提取

要启用提取特定表的显示值,请使用以下参数调用 ENABLE_TABLE 存储过程:

CALL ENABLE_TABLE('<table_to_enable>', <table_config>);
Copy

其中:

table_to_enable

指定 ServiceNow® 表名称。

table_config

包含 fetch_display_values 布尔属性的对象。如果值设置为 true,连接器将提取表的显示值;如果值设置为 :code:`false`(默认),连接器将不提取表的显示值。

例如,要启用表 incident 的引入并提取其显示值,请运行以下命令:

CALL ENABLE_TABLE('incident', { 'fetch_display_values': true });
Copy

备注

每个表的配置不受全局配置的影响。

为所有表配置默认显示值提取设置

要启用提取所有表的显示值,请使用以下参数调用 CONFIGURE_DISPLAY_VALUE_FETCHING 存储过程:

CALL CONFIGURE_DISPLAY_VALUE_FETCHING(<fetch_display_values>);
Copy

其中:

fetch_display_values

指定布尔值。如果值设置为 true,则连接器会提取所有表的显示值;如果值设置为 :code:`false`(默认),则连接器默认不提取任何表的显示值。

例如,要启用提取所有表的显示值,请运行以下命令:

CALL CONFIGURE_DISPLAY_VALUE_FETCHING(true);
Copy

指定数据范围开始时间

默认情况下,Snowflake Connector for ServiceNow® 会同步相应 ServiceNow® 表中的所有记录。对于具有 sys_updated_onsys_created_on 列(从现在开始称为 时间列)的表,可以通过设置 数据范围开始时间 来限制同步数据的范围 – 即记录的相应 时间列 值的下限。

在这种配置下,相应 时间列 值早于 数据范围开始时间戳 的记录将 不会 被引入。此过程使用的相应 时间列 的确定方式与增量更新的确定方式 相同

要更改 数据范围开始时间 值,请使用以下实参调用存储过程 CONFIGURE_TABLES_RANGE_START

CALL CONFIGURE_TABLES_RANGE_START(<table_names>, <range_start>);
Copy

其中:

table_names

指定要配置 数据范围开始时间 的表名称数组。

range_start

时间戳,以 TIMESTAMP_TZ 格式指定 数据范围开始时间,或用 NULL 取消设置当前值。

备注

对于既没有 sys_updated_on 列也没有 sys_created_on 列的表,不能设置数据范围开始时间。

  • 如果表的引入尚未开始,则在第一次引入时将考虑 数据范围开始时间 值。

  • 如果表的引入已经开始(例如,正在进行重新加载),则 数据范围开始时间 值将被忽略,并且需要(再次) 重新加载表,以过滤掉相应 时间列 值过旧的记录。

因此,建议在开始首次引入表之前(因此也在启用它之前)设置 数据范围开始时间

例如,如果表 table1table2 具有必需的 时间列,为了将这两个表的 数据范围开始时间 设置为 2022-11-23 07:00:00 UTC,请运行以下命令:

CALL CONFIGURE_TABLES_RANGE_START(['table1', 'table2'], TO_TIMESTAMP_TZ('2022-11-23 07:00:00 +00:00'));
Copy

然后:

  • 例如,对于表 table1,如果引入尚未开始,则相应 时间列 值早于 2022-11-23 07:00:00 的所有记录都 不会 被引入。

  • 例如,对于表 table2,如果引入已开始,则在重新加载此表之前,所有数据同步中都将忽略 数据范围开始时间 值。重新加载期间,所有对应 时间列 值在 2022-11-23 07:00:00 之前的记录都不会引入。

也可以取消设置 数据范围开始时间。例如,要对表 table1 取消设置 数据范围开始时间,请运行以下命令:

CALL CONFIGURE_TABLES_RANGE_START(['table1'], NULL);
Copy

同样,如果表 table1 的引入已开始,则需要重新加载此表才能从 ServiceNow® 中引入回所有记录。

备注

由于增量更新的性能较低,因此在考虑 数据范围开始时间 的情况下加载数据可能比加载所有历史数据花费的时间更长。

重新加载表中的数据

连接器允许您重新加载表中的数据。当您想将配置中的变更应用于已引入的数据,或当您想确保数据与源保持一致时,这非常有用。

有两种类型的重新加载,完全重新加载用于完全替换数据,筛选重新加载用于通过指定重新加载条件仅影响部分数据。

备注

每次重新加载都会考虑当前重新加载的表配置。例如,这可能会限制哪些记录被引入。

要查看主表的配置,请检查 CONFIGURED_TABLES 视图。

要查看重新加载表的结果配置,请检查 RELOADED_TABLES 视图。

完全重新加载

若要重新加载特定表中的数据,请调用 RELOAD_TABLE 存储过程:

CALL RELOAD_TABLE('<table_name>');
Copy

其中:

table_name

指定要重新加载的表的名称。

调用 RELOAD_TABLE 存储过程时,连接器将执行以下操作:

  1. 连接器将暂时挂起原始表以执行引入。

    备注

    重新加载表时,无法重新启用表以执行引入。

  2. 连接器会创建用来执行引入的单独临时表。

  3. 连接器会将数据引入到这个新的临时表中。这个表在 CONNECTOR_STATS 视图中显示为使用 __tmp 后缀命名的表)。

  4. 引入数据后,连接器会使用临时表中的数据替换原始表中的数据。

  5. 连接器将删除临时表。

  6. 连接器将重新启用原始表以执行引入。

在此过程中,您可以继续查询原始表中的现有数据。但是,在引入过程完成之前,对 ServiceNow® 表中数据的变更不会反映到 Snowflake 表中。

筛选重新加载

要仅重新加载特定表中的部分数据,请调用带有配置对象参数的 RELOAD_TABLE 存储过程:

CALL RELOAD_TABLE('<table_name>', <config>);
Copy

其中:

table_name

指定要重新加载的表的名称。

config

指定重新加载的配置。配置对象可以包括以下属性:

  • sys_ids:要重新加载的 ServiceNow® 记录标识符 (sys_id) 的数组。

  • data_reload_range_start_timedata_reload_range_end_time:以 TIMESTAMP_TZ 格式指定数据范围的时间戳值。根据给定的表引入类型,仅在指定时间范围内具有 sys_updated_onsys_created_on 的记录会被重新加载。

  • conditions:一个字符串表达式,指定 ServiceNow® 表中字段的条件。只有满足条件的记录会被重新加载。

    表达式的语法与 行筛选 相同。如果在常规表上配置了行筛选,则也会应用于条件。

与完全重新加载相比,筛选重新加载不会替换原始表中的数据,而仅更改所选记录。

小技巧

在首次启用大型表进行引入后,您可以快速引入您感兴趣的少部分记录,而无需使用筛选重新加载等待初始加载完成。

备注

data_reload_range_start_timedata_reload_range_end_time 时间范围以及 conditions 筛选器可以同时使用。满足两个条件的记录将被重新加载。

sys_ids 与其他配置属性是互斥的。

例如,要仅重新加载表 incidentsys_id 值为 123 的记录,请运行以下命令:

CALL RELOAD_TABLE('incident', { 'sys_ids': ['1', '2', '3'] });
Copy

要仅重新加载表 incidentsys_updated_on 值在 2022-11-23 07:00:00 和 2022-11-23 08:00:00 UTC 之间,并且仍然处于活动状态的记录,请运行以下命令:

CALL RELOAD_TABLE('incident', {
  'data_reload_range_start_time': TO_TIMESTAMP_TZ('2022-11-23 07:00:00 +00:00'),
  'data_reload_range_end_time': TO_TIMESTAMP_TZ('2022-11-23 08:00:00 +00:00'),
  'conditions': 'active = "true"'
});
Copy

取消表的重新加载

若要取消重新加载表中数据的过程,请使用 CANCEL_RELOAD_TABLE 存储过程,如以下示例所示:

CALL CANCEL_RELOAD_TABLE('<table_name>');
Copy

其中:

table_name

指定要取消重新加载的表的名称。

取消重新加载时,连接器将删除在重新加载期间创建的所有临时对象。然后,可将该表作为正常同步计划的一部分引入。

配置只读副本的使用

要将连接器配置为在 ServiceNow® 环境中使用只读副本,您可以设置自定义查询类别。此配置允许连接器将 API 请求定向到只读副本而不是主实例,这有助于分配负载并提高性能。

要为只读副本的使用配置自定义查询类别,请使用以下参数调用 CONFIGURE_QUERY_CATEGORY 存储过程:

CALL CONFIGURE_QUERY_CATEGORY('<query_category>');
Copy

其中:

query_category

指定将添加到 ServiceNow® API 请求中的查询类别标识符。

配置后,连接器将向所有 ServiceNow® API 请求添加 sysparm_query_category=<query_category> 参数,允许 ServiceNow® 根据您的实例配置将这些请求路由到相应的只读副本。

连接器安装期间设置的默认查询类别值为 list

例如,要将连接器配置为使用名为 connector_replica 的查询类别,请运行以下命令:

CALL CONFIGURE_QUERY_CATEGORY('connector_replica');
Copy

配置表的单页提取大小

连接器通过将表划分为称作页面的较小区块来提取表中的数据。每向 ServiceNow® 发出一个 API 请求,就会提取一个页面。

为了解决这个问题,连接器限制了单次 API 请求中的提取行数。此限制为页面大小。

连接器使用以下过程来确定页面大小:

  1. 最初,默认页面大小设置为 10,000 行。

  2. 如果由于超出响应大小,导致在引入过程中提取请求失败,则页面大小将逐渐减小 1000、100、10 和 1,直到请求成功或将最终页面大小设置为 1。

  3. 成功时的页面大小值将保存在连接器状态中,供后续请求使用。

表的当前页面大小可在 TABLES_STATE 视图中查看。若要查看页面大小,请运行以下命令:

SELECT PAGE_SIZE FROM TABLES_STATE WHERE TABLE_NAME = '<table_name>';
Copy

其中:

table_name

指定要引入的 ServiceNow® 表的名称。

连接器用于确定页面大小的过程可能会导致效率降低。此过程只减小页面大小。不增加页面大小。如果表中存在单个大行,导致页面大小设置为较低的值,则这种情况可能会发生。

若要避免这种情况,可以通过调用 RESET_PAGE_SIZE 存储过程来手动设置页面大小,如以下示例所示:

CALL RESET_PAGE_SIZE('<table_name>');
Copy

CALL RESET_PAGE_SIZE('<table_name>', <page_size>);
Copy

其中:

table_name

指定要引入的 ServiceNow® 表的名称。

page_size

(可选)指定在单页中提取的行数。如果未提供,则使用连接器配置中提供的默认值。默认和推荐值是 10000。最小值为 1,最大值为 25000。

备注

还可以为配置的日志表设置页面大小,通常为 sys_audit_delete。如果删除从表现不佳的日志表进行的引入时发生故障,您可以降低页面大小以避免更多故障。

请注意,无需明确启用日志表进行引入即可使连接器同步删除的行。

引入运行

给定表的引入会根据配置好的计划触发。运行会从源表中循环下载所有相关行,这些行将组成上一段中提到的页面。

初始加载和更新

一页数据提取完成时,会立即插入到相应的事件日志表中。在这个暂存区,新提取的更改在同步表中不可用,也不能通过展平视图使用。提取完成后,只要有任何数据返回,就会发起下一个附带更新条件的请求。如果引入运行完成,并且源表中没有更多要提取的数据,则会触发异步合并任务,该任务会从自上次合并以来插入的事件日志中获取所有变更,并将这些变更应用到同步表。应用完成后,就可以在同步表和展平视图中使用数据了。

截断和加载

在截断和加载模式下,每次引入运行都会创建一个临时表。每个提取的行页面都会首先插入到此临时表中(这个表位于内部连接器架构中,连接器用户无法使用)。在这个暂存区,新提取的更改在同步表中不可用,也不能通过展平视图使用,它们仍显示在上一次运行中提取的数据。如果引入运行完成,并且源表中没有更多可用数据,临时表中的数据将会替换同步表中的现有数据。所有提取的行也会添加到事件日志中。最后,会将临时表删除。

监控进度

若要查看当前或过去引入运行的状态,可以查询 CONNECTOR_STATS 视图。它显示在 STATUS 列中。仅当提取数据成功,且所有更改都应用于同步表时,它才会设置为 DONE。如果引入正在运行,或是同步表合并/同步表行的替换尚未完成,则状态为 RUNNING

后续步骤

配置引入后,请执行 访问 Snowflake 中的 ServiceNow® 数据 中所述的步骤,查看或访问 ServiceNow® 数据。

语言: 中文