ServiceNow 데이터에 대한 데이터 수집 설정하기

이 항목에서는 ServiceNow용 Snowflake Connector를 위한 데이터 수집을 설정하는 방법을 설명합니다.

참고

ServiceNow용 Snowflake Connector는 ServiceNow 테이블에서 Snowflake로 데이터를 수집합니다. 데이터 수집은 ServiceNow 테이블 APIv2 에 따라 달라집니다.

이 항목의 내용:

ServiceNow 테이블 수집 전략

참고

  • 커넥터는 sys_id 열이 있는 테이블만 수집할 수 있습니다.

  • ServiceNow 뷰 는 지원되지 않습니다. 이러한 뷰를 수집하는 대신, 기본 뷰에 대한 모든 테이블을 동기화하고 Snowflake에서 동기화된 테이블을 조인해야 합니다.

커넥터는 테이블 스키마에 따라 다양한 수집 전략을 사용합니다. 커넥터는 다음 세 가지 수집 모드를 사용합니다.

  • 테이블이 동기화에 대해 활성화되어 있으면 테이블마다 데이터의 초기 로딩 이 이루어집니다.

    이 모드에서는 테이블이 sys_id 열에서 ID로 식별되는 레코드를 반복하여 수집됩니다. 모든 레코드가 수집되면 초기 로드 단계가 완료됩니다. 특정 테이블의 경우 수집되는 레코드를 제한할 수 있는 데이터 범위 시작 시간 값을 설정할 수도 있습니다.

  • 증분 업데이트sys_updated_on 또는 sys_created_on 열이 있는 테이블에서만 이루어집니다.

    증분 업데이트는 초기 로드가 완료된 후 시작되며 사용자가 구성할 수 있는 정기적인 일정에 따라 이루어집니다. 이 모드에서 커넥터는 마지막 동기화 이후에 추가, 업데이트 또는 삭제된 레코드만 수집합니다.

  • sys_updated_on 또는 sys_created_on 열이 없는 테이블의 경우, 커넥터는 자르기 및 로드 모드를 사용합니다.

    이 모드에서는 테이블이 항상 초기 로드 접근 방식을 사용하여 수집되며 새로 수집된 데이터가 이전 데이터를 바꿉니다. 커넥터는 INSERT OVERWRITE 명령을 실행하여 데이터를 바꿉니다.

참고

  • 〈증분 업데이트〉 모드에서 커넥터는 해당 열이 있는 경우 sys_updated_on 열을 사용합니다.

    열이 없는 경우 커넥터는 sys_created_on 열을 대신 사용합니다.

  • 회전된 테이블 의 경우 커넥터는 항상 sys_created_on 열을 사용합니다. sys_created_on 이외의 열을 사용하여 테이블을 회전하는 경우 해당 테이블을 수집하면 성능 문제가 발생할 수 있습니다.

ServiceNow 테이블의 병렬 수집

커넥터는 몇 개의 테이블을 병렬로 수집하지만 각 개별 테이블의 수집은 동기 프로세스입니다. 즉, 큰 테이블을 수집하면 커넥터가 다른 테이블을 업데이트하지 못하게 될 수 있습니다. 이 문제는 다른 단계보다는 초기 로드 단계에서 발생할 가능성이 높습니다.

참고

  • ServiceNow에서 레코드를 수정할 때 sys_updated_on 또는 sys_created_on 필드를 업데이트하지 않으면 해당 수정 사항이 Snowflake에 전파되지 않아 데이터 불일치가 발생합니다. 시스템 필드 업데이트를 비활성화 하지 않는 것이 좋습니다.

  • 레코드 삭제를 감사하지 않으면 삭제된 레코드에 대한 정보가 Snowflake에 전파되지 않아 데이터 불일치가 발생합니다.

참고

Snowflake 및 ServiceNow REST API에 대한 제한으로 인해, 단일 행의 데이터가 10MB를 초과하면 커넥터가 테이블을 수집할 수 없습니다. 그럴 경우 커넥터는 테이블 일정에 정의된 빈도로 데이터를 수집하려 시도합니다. 행이 제한을 초과하면 커넥터가 오류 메시지를 생성하고 계속해서 다른 테이블을 수집합니다.

Snowsight를 사용하여 데이터 수집 설정하기

Snowsight를 사용하여 데이터 수집을 설정하려면 다음을 수행하십시오.

  1. ACCOUNTADMIN 역할을 가진 사용자로 Snowsight 에 로그인합니다.

  2. 왼쪽 탐색 모음에서 Marketplace 를 선택합니다.

  3. ServiceNow용 Snowflake Connector를 검색한 다음 커넥터에 알맞은 타일을 선택합니다.

  4. Snowflake Connector for ServiceNow 페이지에서 Select Tables 를 선택합니다.

    그러면 모든 ServiceNow 테이블 목록이 표시됩니다.

    참고

    커넥터는 sys_id 열이 있는 테이블만 수집할 수 있습니다.

  5. 수집하려는 테이블을 선택합니다.

    1. 수집하려는 테이블을 검색합니다.

    2. 선택하려는 테이블 옆의 Status 열에서 확인란을 선택합니다.

    3. Synch Schedule 아래에서 Snowflake와 ServiceNow 사이에서 테이블을 동기화할 빈도를 선택합니다.

    4. Snowflake로 수집하려는 각 테이블에 대해 이러한 단계를 반복합니다.

  6. 현재 선택한 테이블을 보려면 Status 열의 머리글을 선택하십시오.

  7. Snowflake 계정으로의 데이터 수집을 시작하려면 Start Ingestion 을 선택하십시오.

커넥터 상태가 Loading Data 로 변경됩니다. 하나 이상의 테이블 수집에 성공하면 커넥터 상태가 Last Successful Load: just now 로 변경됩니다.

Snowflake에서 테이블의 내용을 보는 방법에 대한 정보는 커넥터 모니터링하기 섹션을 참조하십시오.

Snowsight를 사용하여 데이터 수집 수정하기

수집할 ServiceNow 테이블 또는 테이블의 동기화 일정을 수정하려면 다음을 수행하십시오.

  1. ACCOUNTADMIN 역할을 가진 사용자로 Snowsight 에 로그인합니다.

  2. 왼쪽 탐색 모음에서 Marketplace 를 선택합니다.

  3. ServiceNow용 Snowflake Connector를 검색한 다음 커넥터에 알맞은 타일을 선택합니다.

  4. Snowflake Connector for ServiceNow 페이지에서 Edit 를 선택합니다.

  5. 수집하려는 테이블을 수정합니다.

    1. 수집하려는 테이블을 검색합니다.

    2. 선택하거나 선택 취소하려는 테이블 옆의 Status 열에서 확인란을 선택합니다.

    3. Synch Schedule 아래에서 Snowflake와 ServiceNow 사이에서 테이블을 동기화할 빈도를 선택합니다.

  6. Update 를 선택합니다.

SQL 문을 사용하여 데이터 수집 설정하기

SQL 문을 사용하여 데이터 수집을 설정하려면 다음을 수행하십시오.

참고

이러한 설정을 구성하려면 커넥터의 인스턴스 역할을 하는 데이터베이스 의 PUBLIC 스키마에 정의된 저장 프로시저를 사용하십시오.

이러한 저장 프로시저를 호출하기 전에 해당 데이터베이스를 세션에 사용할 데이터베이스로 선택하십시오.

예를 들어 해당 데이터베이스의 이름이 my_connector_servicenow 인 경우 다음 명령을 실행합니다.

USE DATABASE my_connector_servicenow;
Copy

동기화 일정 지정하기

ServiceNow용 Snowflake Connector는 지정된 일정에 따라 모든 ServiceNow 테이블의 데이터를 Snowflake에 동기화합니다. 기본적으로, 모든 테이블은 매시간(1h) 한 번씩 동기화됩니다.

모든 테이블의 기본 동기화 일정을 변경하려면 다음 인자를 사용하여 CONFIGURE_CONNECTOR 저장 프로시저를 호출하십시오.

CALL CONFIGURE_CONNECTOR('data_ingestion_schedule', '<schedule>');
Copy

여기서

data_ingestion_schedule (문자열 리터럴)

동기화 일정을 구성하도록 지정합니다.

schedule

동기화 빈도를 지정합니다. 다음 문자열 값 중 하나를 지정할 수 있습니다.

  • '30m'

  • '1h'

  • '3h'

  • '6h'

  • '12h'

  • '1d'

커넥터를 사용하면 동기화하도록 활성화된 각 테이블에 대해 다른 일정을 지정할 수도 있습니다. 선택한 테이블 세트의 동기화 일정을 변경하려면 다음 인자를 사용하여 CONFIGURE_TABLES_SCHEDULE 저장 프로시저를 호출하십시오.

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

여기서

table_names

동기화 일정을 구성하려는 테이블 이름으로 구성된 배열을 지정합니다.

schedule

동기화 빈도를 지정합니다. 다음 JSON 값 중 하나를 지정할 수 있습니다.

  • { 'type': 'interval', 'value': '<interval_value>' }. 여기서 interval_value 는 다음 문자열 값 중 하나입니다.

    • '30m'

    • '1h'

    • '3h'

    • '6h'

    • '12h'

    • '1d'

  • { 'type': 'custom', 'value': { 'hour': <hour>, 'dayOfWeek': '<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' 과 같이 숫자가 아닌 다른 값은 지원되지 않습니다.

예를 들어 매주 토요일과 일요일 11:00 PM UTC에 table_1table_2 테이블을 수집하려면 다음 저장 프로시저를 호출하십시오.

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

기본적으로 커넥터는 예약된 시작 시간으로부터 3시간 내에 수집을 시작하려고 합니다. 해당 시간 프레임 내에 수집을 시작할 수 없는 경우(예: 커넥터가 다른 테이블을 수집하는 경우) 현재 예약된 실행 항목이 실행되지 않습니다. 커넥터는 다음으로 예약된 시간 프레임에 수집을 실행하려고 합니다. CONFIGURE_CONNECTOR 저장 프로시저를 호출하여 시간 프레임의 기간을 변경할 수 있습니다.

CALL CONFIGURE_CONNECTOR('custom_schedule_start_ingestion_window', <window_length>);
Copy

여기서 window_length 는 ISO 8601 기간 형식의 윈도우 길이입니다. 기간은 정각 시간 단위에 맞춰 반올림해야 하며 최소 1시간 이상 지속해야 합니다. 예를 들어, 'PT12H' 값은 12시간 동안 지속되는 기간을 지정하고, 'P2D' 값은 2일 동안 지속되는 기간을 지정합니다.

사용자 지정 일정이 있는 테이블만 활성화하는 경우 이 구성은 구성된 테이블에 대해 평면화된 뷰를 생성하고 새로 고치는 데 걸리는 시간에만 영향을 미칩니다. 평면화된 뷰는 다음 조건이 충족된 후 첫 번째 수집 주기에서 생성됩니다.

  • 메타데이터 테이블 수집이 완료됨

  • 구성된 테이블의 수집이 시작됨

이메일 경고가 활성화된 경우 사용자 지정 예약을 사용할 때 경고 빈도를 Once per day 로 변경하는 것이 좋습니다.

또한 커넥터는 다음 인자를 사용하여 더 이상 사용되지 않는 CONFIGURE_CONNECTOR_TABLES 저장 프로시저를 노출합니다.

CALL CONFIGURE_CONNECTOR_TABLES('schedule_interval', '<schedule>', '<table_names>');
Copy

여기서

schedule

동기화 빈도를 지정합니다. 다음 문자열 값 중 하나를 지정할 수 있습니다.

  • '30m'

  • '1h'

  • '3h'

  • '6h'

  • '12h'

  • '1d'

table_names

테이블 이름의 쉼표로 구분된 목록을 지정합니다.

이러한 테이블의 경우 schedule 매개 변수에 지정하는 일정이 CONFIGURE_CONNECTOR('data_ingestion_schedule', 'schedule') 저장 프로시저를 호출하여 설정한 기본 일정보다 우선합니다.

데이터 범위 시작 시간 지정하기

기본적으로 ServiceNow용 Snowflake 커넥터는 해당 ServiceNow 테이블의 모든 레코드를 동기화합니다. 다음이 포함된 테이블의 경우: sys_updated_on 또는 sys_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에서 모든 레코드를 다시 수집하려면 이 테이블을 다시 로드해야 합니다.

참고

데이터 범위 시작 시간 을 고려하여 데이터를 로드하는 작업은 증분 업데이트 성능 저하로 인해 모든 기록 데이터를 로드하는 것보다 시간이 더 오래 걸릴 수 있습니다.

테이블 동기화 활성화 또는 비활성화하기

ServiceNow의 특정 테이블에 대한 데이터 동기화를 활성화하려면 다음 인자를 사용하여 ENABLE_TABLES 저장 프로시저를 호출하십시오.

CALL ENABLE_TABLES(<tables_to_enable>);
Copy

여기서

tables_to_enable

ServiceNow 테이블 이름의 배열을 지정합니다.

ServiceNow UI에 표시된 레이블이 아닌 테이블 이름을 사용하십시오. 테이블 이름은 ServiceNow의 데이터 사전 테이블 에서 찾을 수 있습니다. ServiceNow UI에서 System Definition » Tables 로 이동합니다. Name 열에는 테이블의 이름이 표시됩니다.

예를 들어 table1, table2, table3 이라는 테이블의 동기화를 활성화하려면 다음 명령을 실행하십시오.

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

ServiceNow의 특정 테이블에 대한 데이터 동기화를 활성화하려면 다음 인자를 사용하여 DISABLE_TABLES 저장 프로시저를 호출하십시오.

CALL DISABLE_TABLES(<tables_to_disable>);
Copy

여기서

tables_to_disable

ServiceNow 테이블 이름의 배열을 지정합니다.

ServiceNow UI에 표시된 레이블이 아닌 테이블 이름을 사용하십시오. 테이블 이름은 ServiceNow의 데이터 사전 테이블 에서 찾을 수 있습니다. ServiceNow UI에서 System Definition » Tables 로 이동합니다. Name 열에는 테이블의 이름이 표시됩니다.

예를 들어 table1, table2 라는 테이블의 동기화를 비활성화하려면 다음 명령을 실행하십시오.

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

테이블을 비활성화하면 동기화가 중지됩니다. 테이블 동기화가 다시 활성화되면 수집이 일시 중지되었던 위치에서 다시 시작됩니다.

참고

동기화에서 모든 테이블을 비활성화한다고 해서 ServiceNow용 Snowflake Connector의 비용 생성이 중지된다는 의미는 아닙니다. 알림과 관련된 작업과 같은 몇몇 작업이 백그라운드에서 실행될 수 있습니다.

커넥터는 두 개의 인자를 받는 ENABLE_TABLES 프로시저의 사용 중단된 버전을 노출합니다.

CALL ENABLE_TABLES('<tables_to_configure>', <enable>);
Copy

여기서

tables_to_configure

ServiceNow 테이블 이름의 쉼표로 구분된 목록을 지정합니다.

enable

이러한 테이블에 대해 동기화를 활성화할지 비활성화할지를 지정합니다. 활성화하려면 TRUE 를 지정하고 비활성화하려면 FALSE 를 지정하십시오.

이 프로시저는 사용 중단되며 향후 커넥터 릴리스에서 제거될 예정입니다. 단일 인자와 함께 ENABLE_TABLESDISABLE_TABLES 를 사용하는 것이 좋습니다.

ENABLE_TABLESDISABLE_TABLES 프로시저는 지정된 테이블 이름을 ENABLED_TABLES 뷰에 추가합니다.

ServiceNow에서 사용 가능한 모든 테이블을 ENABLED_TABLES 뷰에 추가하려면 PREFILL_CONFIG_TABLE 저장 프로시저를 호출하십시오.

참고

이 프로시저를 호출하려면 커넥터에서 사용하는 ServiceNow 사용자가 sys_db_object 테이블에 대한 액세스 권한이 있어야 합니다.

이 프로시저를 호출하려면 다음 명령을 실행하십시오.

CALL PREFILL_CONFIG_TABLE();
Copy

이 프로시저는 모든 ServiceNow 테이블을 ENABLED_TABLES 뷰에 추가하고 기본적으로 테이블에서 수집하지 못하도록 비활성화합니다.

동기화를 위해 새로 추가된 이러한 테이블을 활성화하려면 다음을 수행하십시오.

  1. 다음 명령을 실행하여 ENABLED_TABLES 뷰에서 테이블의 쉼표로 구분된 목록을 생성합니다.

    SELECT LISTAGG(TABLE_NAME, ',') FROM ENABLED_TABLES;
    
    Copy
  2. 이 명령으로 반환된 목록에서 동기화하면 안 되는 테이블을 모두 제거합니다.

  3. ENABLE_TABLES 저장 프로시저를 호출하고 이 목록을 전달합니다.

최근에 새 테이블이 ServiceNow에 추가된 경우 이와 동일한 접근 방식(즉, 테이블 목록을 생성하고 목록을 편집하고 목록을 ENABLE_TABLES 저장 프로시저에 전달하는 방식)을 사용하여 새 테이블을 식별하고 해당 테이블을 동기화하도록 활성화할 수 있습니다.

참고

커넥터는 ServiceNow에서 롤백 또는 복구 삭제 를 지원하지 않습니다.

롤백 및 삭제 복구 기능을 사용하면 데이터 불일치가 발생할 수 있습니다. ServiceNow에서 복구된 레코드는 여전히 Snowflake에서 삭제된 것으로 표시될 수 있습니다. RELOAD_TABLE 저장 프로시저를 사용하여 이를 해결할 수 있습니다.

열 필터링을 사용하여 테이블 동기화 활성화하기

Snowflake의 ServiceNow 테이블에서 모든 열이 필요하지 않은 경우 건너뛸 수 있습니다. 예를 들어 단일 행이 10MB의 최대 행 크기를 초과하는 경우 열을 건너뛸 수 있습니다.

지정된 열로 테이블 수집을 활성화하려면 다음 명령을 실행하십시오.

CALL ENABLE_TABLE_WITH_COLUMNS('<table_to_enable>', <include_columns>, <exclude_columns>);
Copy

여기서

table_to_enable

ServiceNow 테이블 이름을 지정합니다.

include_columns

수집할 열 이름의 배열을 지정합니다. sys_id, sys_created_onsys_updated_on 이 존재하는 경우 이 배열에 언급되지 않더라도 항상 포함됩니다.

exclude_columns

수집에서 제외할 열 이름의 배열을 지정합니다. sys_id, sys_created_on 또는 sys_updated_on 열은 커넥터가 수집 프로세스에서 사용하므로 제외할 수 없습니다.

참고

ServiceNow의 열은 소문자로 작성되고 커넥터가 사용하는 API는 대/소문자를 구분하므로 지정된 열에 제공된 값도 소문자여야 합니다.

참고

include_columnsexclude_columns 를 모두 제공하면 안 됩니다. include_columns 를 나열하려면 exclude_columns 를 비워 두어야 하며 그 반대의 경우도 마찬가지입니다. 두 배열이 모두 비어 있지 않고 충돌하는 열이 없으면 include_columnsexclude_columns 보다 우선합니다.

include_columnsexclude_columns 가 모두 빈 배열이면 사용 가능한 모든 열이 수집됩니다.

예를 들어 sys_id, sys_updated_on, col_1col_2 열이 있는 u_table 이라는 ServiceNow 테이블이 있고 다음을 실행하면

CALL ENABLE_TABLE_WITH_COLUMNS('u_table', ['sys_id', 'sys_updated_on'], []);
Copy

지정된 테이블에 대해 sys_idsys_updated_on 열만 수집하지만 다음을 호출하면

CALL ENABLE_TABLE_WITH_COLUMNS('u_table', [], ['col_1']);
Copy

sys_id, sys_updated_on 그리고 col_2 도 수집합니다.

참고

이 프로시저를 사용하려면 커넥터가 ServiceNow admin 역할이 할당된 ServiceNow 사용자를 사용해야 합니다. 이 역할이 없으면 프로시저는 인증 오류를 반환합니다. 자세한 내용은 ServiceNow 인스턴스 준비하기 를 참조하십시오.

커넥터는 제공된 열의 유효성을 검사하고 ServiceNow에서 열을 사용할 수 없는 경우 활성화 요청을 거부합니다. ServiceNow API는 포함 모드만 지원하므로 커넥터는 제공된 열 배열을 포함된 열 목록으로 변환하고 각 요청과 함께 이를 ServiceNow에 보냅니다. 포함된 열이 있는 URL이 너무 길어서 ServiceNow에서 처리할 수 없습니다. 커넥터는 ENABLE_TABLE_WITH_COLUMNS 가 호출될 때 이 제한의 유효성을 검사합니다.

각 테이블에 대한 포함된 열 구성은 ENABLED_TABLES 뷰의 INCLUDED_COLUMNS 열에서 찾을 수 있습니다. 수집된 열 목록을 수정하려면 먼저 특정 테이블을 비활성화해야 합니다. 테이블에 열 필터링이 구성된 경우 ENABLE_TABLE_WITH_COLUMNS 프로시저를 사용해야만 열을 활성화할 수 있습니다. 이 경우 ENABLE_TABLES 를 사용할 수 없습니다.

구성 변경은 이미 수집된 데이터에 영향을 주지 않습니다. 열 필터링은 새로 수집된 레코드에만 적용됩니다.

평면화된 뷰에는 테이블이 활성화되었을 때 지정된 열만 포함됩니다. 이들은 포함된 열 목록이 변경될 때마다 업데이트됩니다. 열 필터링이 구성되지 않은 경우 뷰는 사용 가능한 모든 열로 구성됩니다.

테이블에서 데이터 다시 로드하기

특정 테이블의 데이터를 다시 로드하려면 RELOAD_TABLE 저장 프로시저를 호출하십시오.

CALL RELOAD_TABLE('<table_name>');
Copy

여기서

table_name

다시 로드할 테이블의 이름을 지정합니다.

RELOAD_TABLE 저장 프로시저를 호출하면 커넥터가 다음 예제를 수행합니다.

  1. 커넥터가 수집을 위해 임시로 원본 테이블을 일시 중단합니다.

    참고

    테이블을 다시 로드하는 동안 수집을 위해 테이블을 다시 활성화할 수 없습니다.

  2. 커넥터가 수집을 위한 별도의 임시 테이블을 만듭니다.

  3. 커넥터가 데이터를 이 새 임시 테이블로 수집합니다. 이 테이블은 CONNECTOR_STATS 뷰에서 __tmp 접미사로 명명된 테이블로 표시됩니다.

    참고

    다시 로드할 때마다 데이터 범위 시작 시간 값을 고려하므로 수집되는 레코드가 제한될 수 있습니다.

  4. 데이터가 수집된 후 커넥터는 원본 테이블의 데이터를 임시 테이블의 데이터로 바꿉니다.

  5. 커넥터가 임시 테이블을 삭제합니다.

  6. 커넥터가 수집을 위해 원래 테이블을 다시 활성화합니다.

이 프로세스 중에 원래 테이블의 기존 데이터를 계속 쿼리할 수 있습니다. 하지만 ServiceNow 테이블의 데이터에 대한 변경 사항은 수집 프로세스가 완료될 때까지 Snowflake 테이블에 반영되지 않습니다.

ServiceNow 인스턴스의 오버로드를 방지하려면 테이블을 한 번에 하나씩만 다시 로드하십시오.

테이블 다시 로드 취소하기

테이블의 데이터를 다시 로드하는 프로세스를 취소하려면 다음 예와 같이 CANCEL_RELOAD_TABLE 저장 프로시저를 사용하십시오.

CALL CANCEL_RELOAD_TABLE('<table_name>');
Copy

여기서

table_name

다시 로드를 취소하려는 테이블의 이름을 지정합니다.

다시 로드를 취소하면 커넥터가 다시 로드 중에 생성된 모든 임시 오브젝트를 삭제합니다. 그런 다음 일반 동기화 일정의 일부로 테이블을 사용하여 수집할 수 있습니다.

테이블에 대한 단일 페이지 가져오기 크기 구성하기

커넥터는 페이지라고 하는 더 작은 청크로 나누어 테이블에서 데이터를 가져옵니다. ServiceNow에 대한 각 API 요청은 1개 페이지를 가져옵니다. Snowflake와 ServiceNow REST API의 제한으로 인해 ServiceNow API의 응답 크기는 10MB를 초과할 수 없으며 응답은 1분 이내에 반환되어야 합니다.

이를 처리하기 위해 커넥터는 단일 API 요청 내에서 가져오는 행 수를 제한합니다. 이 제한은 페이지 크기입니다.

커넥터가 페이지 크기를 결정하기 위해 사용하는 프로세스는 다음과 같습니다.

  1. 처음에 기본 페이지 크기는 10,000개 행으로 설정됩니다.

  2. 응답 크기를 초과하여 수집 중 가져오기 요청이 실패하면 요청이 성공하거나 최종 페이지 크기가 1로 설정될 때까지 페이지 크기가 1000, 100, 10 및 1씩 점진적으로 감소합니다.

  3. 성공한 페이지 크기는 커넥터 상태에 저장되며 후속 요청에서 이 값이 사용됩니다.

테이블에 대한 현재 페이지 크기는 ENABLED_TABLES 뷰에서 확인할 수 있습니다. 페이지 크기를 보려면 다음 명령을 실행합니다.

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

여기서

table_name

수집 중인 ServiceNow 테이블의 이름을 지정합니다.

페이지 크기를 결정하기 위해 커넥터가 사용하는 프로세스는 비효율적일 수 있습니다. 이 프로세스에서는 페이지 크기 감소만 수행되며, 페이지 크기 증가는 수행되지 않습니다. 이러한 상황은 테이블에 페이지 크기가 더 낮은 값으로 설정되도록 하는 대규모 행 1개가 있는 경우에 발생할 수 있습니다.

이러한 상황을 방지하려면, 다음 예에서와 같이 RESET_PAGE_SIZE 저장 프로시저를 호출하여 페이지 크기를 수동으로 설정할 수 있습니다.

CALL RESET_PAGE_SIZE('<table_name>');
Copy

여기서

table_name

수집 중인 ServiceNow 테이블의 이름을 지정합니다.

수집 실행

주어진 테이블에 대한 수집 실행은 구성된 일정에 따라 트리거됩니다. 실행은 이전 단락에서 언급한 페이지로 구분된 모든 관련 행을 루프의 원본 테이블에서 다운로드합니다.

초기 로드 및 업데이트

데이터 페이지를 가져오자마자 해당 이벤트 로그 테이블에 삽입됩니다. 이 스테이지에서는 새로 가져온 변경 사항을 동기화 테이블이나 평면화된 뷰를 통해 아직 사용할 수 없습니다. 완료 시 데이터가 반환되는 한 업데이트된 기준으로 다음 요청이 발행됩니다. 수집 실행이 완료되고 원본 테이블에 더 이상 가져올 데이터가 없으면 비동기 병합 작업이 트리거되며, 해당 작업은 마지막 병합 이후 삽입된 이벤트 로그의 모든 변경 내용을 가져와서 동기화 테이블에 적용합니다. 완료되면 동기화 테이블과 평면화된 뷰에서 데이터를 사용할 수 있게 됩니다.

자르기 및 로딩

자르기 및 로딩 모드에서는 각 수집 실행에 대해 임시 테이블이 생성됩니다. 가져온 행의 각 페이지는 먼저 이 임시 테이블에 삽입됩니다(이 테이블은 내부 커넥터 스키마에 존재하며 커넥터 사용자는 사용할 수 없음). 이 스테이지에서는 새로 가져온 변경 사항을 동기화 테이블이나 평면화된 뷰를 통해 아직 사용할 수 없으며, 이전 실행에서 가져온 데이터가 계속 표시됩니다. 수집 실행이 완료되고 원본 테이블에 더 이상 사용 가능한 데이터가 없으면 동기화 테이블의 기존 데이터가 임시 테이블의 데이터로 바뀝니다. 가져온 모든 행은 이벤트 로그에도 추가됩니다. 마지막에는 임시 테이블이 삭제됩니다.

진행 상황 모니터링

현재 또는 과거 수집 실행 상태를 확인하려면 CONNECTOR_STATS 뷰를 쿼리하면 됩니다. 이는 STATUS 열에 표시됩니다. 데이터를 성공적으로 가져오고 모든 변경 사항이 동기화 테이블에 적용된 경우에만 DONE 으로 설정됩니다. 수집이 실행 중이거나 동기화 테이블에 대한 병합/동기화 테이블의 행 바꾸기가 아직 완료되지 않은 경우 상태는 RUNNING 입니다.