Set up data ingestion for your ServiceNow® data¶
このトピックでは、 Snowflake Connector for ServiceNow® のデータインジェストを設定する方法について説明します。
注釈
Snowflake Connector for ServiceNow® は ServiceNow®テーブルからSnowflakeにデータをインジェストします。データインジェスチョンは、``v2``® ServiceNowテーブル `API の `_ に依存します。
このトピックの内容:
Strategies for ingesting ServiceNow® tables¶
注釈
コネクタは、
sys_id列が存在するテーブルのみをインジェストできます。ServiceNow ビュー はサポートされていません。これらのビューをインジェストする代わりに、基になるビューのすべてのテーブルを同期し、同期したテーブルをSnowflakeに結合する必要があります。
コネクタは、テーブルスキーマに応じて、さまざまなインジェスチョン戦略を使用します。コネクタは、次の3つのインジェスチョンモードを使用します。
テーブルの同期が有効になると、テーブルごとにデータの 初期ロード が実行されます。
In this mode, the table is ingested by iterating through the records identified by the IDs in the
sys_idcolumn. 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_onまたはsys_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_onorsys_created_oncolumns, the connector uses the truncate and load mode.このモードでは、テーブルは常に初期ロードアプローチを使用してインジェストされ、新しくインジェストされたデータが古いデータに置き換わります。コネクタは、
INSERT OVERWRITEコマンドを実行してデータを置き換えます。
注釈
「増分更新」モードでは、
sys_updated_on列が存在する場合、コネクタはその列を使用します。列が存在しない場合、コネクタは代わりに
sys_created_on列を使用します。回転テーブル の場合、コネクタは常に
sys_created_on列を使用します。sys_created_on以外の列を使用してテーブルを回転すると、そのテーブルのインジェスチョンによってパフォーマンスの問題が発生する可能性があります。
注釈
ServiceNow で記録が変更されたときに
sys_updated_onまたはsys_created_onフィールドが更新されていない場合、それらの変更はSnowflakeに反映されず、データの不整合が発生します。Snowflakeでは、 システムフィールドの更新を無効にする ことは避けることをお勧めします。記録の削除が 監査されていない 場合、削除された記録に関する情報はSnowflakeに反映されず、データの不整合が発生します。
注釈
Snowflakeと ServiceNow® REST APIs の制限により、1行のデータが128 MB を超えると、コネクタはデータをテーブルにインジェストできません。その場合、コネクタはテーブルスケジュールで定義された頻度でデータのインジェスチョンを試みます。行が制限を超えると、コネクタはエラーメッセージを生成し、他のテーブルのインジェスチョンを続行します。この制限を克服するために、列フィルタリング を構成して、インジェスチョンから大きな列を除外できます。
アーカイブ済みの記録¶
コネクタは、インジェストされたテーブルに対してSnowflake側で ServiceNow でアーカイブされた記録 を積極的に反映しません。ある日付より古い非アクティブな記録をアーカイブすると想定すると、以下のようになります。
コネクタがインジェストする前(たとえば、テーブルの 初期ロード の前)にアーカイブされた記録は、Snowflake側のテーブルにはまったく存在しません。
コネクタによって既にインジェストされた後にアーカイブされた記録は、アーカイブアクションが発生したことを示すことなく、Snowflake側に残ります。
既に 増分更新 モードで動作しているテーブルに対して復元されたアーカイブ記録は、その後にその記録も変更されない限り(その
sys_updated_on値が現在の時刻に更新されない限り)、Snowflake側でインジェストされることはありません。テーブルの 初期ロード 中に復元されたアーカイブ記録は、 ID 列の
sys_idによっては、Snowflake側でインジェストされる場合があります。
アクティブなアーカイブルールがあるテーブルを最新の状態にしたい場合、 テーブル全体をリロード することができます。しかし、リロード終了後にアーカイブまたは復元された記録は、上記と同じ原則に従います。
ServiceNow アーカイブテーブル ar_[table_name] の同期を有効にすることができます。ただし、そのようなテーブルの 初期ロード に続く最初の 増分更新 は、アーカイブテーブルの 初期ロード が開始された日以降に作成/更新された記録のために検索されます。sys_updated_on または sys_created_on のどちらも記録のアーカイブ時には変更されないため、アーカイブテーブルの 初期ロード 以降、ある時点までにアーカイブされた記録は、Snowflake側で欠落しています。たとえば、1年以上前の記録をアーカイブする場合、アーカイブテーブルの 初期ロード の後、1年間アーカイブされた記録は、Snowflake側のアーカイブテーブルにインジェストされません。アーカイブテーブルの 初期ロード の後、 destroyルール によって復元たは削除されたアーカイブ記録は、Snowflake側でそのテーブルから削除されることはありません。
ServiceNow®テーブルの並列インジェスチョン¶
コネクタはいくつかのテーブルを並行してインジェストしますが、個別のテーブルのインジェスチョンは同期プロセスです。これは、大型のテーブルをインジェストすると、コネクタが他のテーブルを更新するのをブロックする可能性があることを意味します。この問題は、他のフェーズよりも初期ロードフェーズで発生する可能性が高くなります。デフォルトでは、コネクタは10個のワーカースレッドを使用します。これは、ServiceNow®インスタンスに過負荷をかけないようにするための最適な値と考えられています。インスタンスがさらなる同時実行をサポートできることが確実な場合は、CONFIGURE_CONCURRENCY プロシージャ を呼び出すことで、この値を最大30まで増やすことができます。
Snowsight を使用したデータインジェスチョンの設定¶
Snowsight を使用してデータインジェストを設定するには、次を実行します。
Snowsight ロールを持つユーザーとして ACCOUNTADMIN にサインインします。
ナビゲーションメニューで Catalog » Apps を選択します。
Snowflake Connector for ServiceNow® アプリを検索し、コネクタのタイルを選択します。
Snowflake Connector for ServiceNow® のページで、 Data Sync タブを選択します。
これにより、すべての ServiceNow®テーブルのリストが表示されます。
注釈
コネクタは、
sys_id列が存在するテーブルのみをインジェストできます。インジェストするテーブルを選択します。
インジェストするテーブルを検索します。
選択するテーブルの左から Status 列のチェックボックスを選択します。
Sync Schedule で、Snowflakeと ServiceNow®間でテーブルを同期する頻度を選択します。
Snowflakeにインジェストするテーブルごとに、これらのステップを繰り返します。
Status 列の見出しを選択して、現在選択しているテーブルを表示します。
Start sync を選択して、Snowflakeアカウントへのデータのインジェスチョンを開始します。
コネクタのステータスが Syncing data に変わります。少なくとも1つのテーブルが正常にインジェストされると、コネクタのステータスが Last Sync: just now に変わります。
Snowflakeでテーブルのコンテンツを表示する方法については、 Snowflake Connector for ServiceNow® のモニター をご参照ください。
Snowsightを使用したデータインジェスチョンの変更¶
インジェストされる ServiceNow®テーブルまたはテーブルの同期スケジュールを変更するには、次を実行します。
Snowsight ロールを持つユーザーとして ACCOUNTADMIN にサインインします。
ナビゲーションメニューで Catalog » Apps を選択します。
Snowflake Connector for ServiceNow® アプリを検索し、コネクタのタイルを選択します。
Snowflake Connector for ServiceNow® のページで、 Data Sync を選択します。
編集モードに入るには、 Edit tables ボタンを選択します。
インジェストするテーブルを変更します。
インジェストするテーブルを検索します。
選択する、または選択解除するテーブルの左から Status 列のチェックボックスを選択します。
Sync Schedule で、Snowflakeと ServiceNow®間でテーブルを同期する頻度を選択します。
Update data sync を選択します。
SQL ステートメントを使用したデータインジェスチョンの設定¶
SQL ステートメントを使用してデータインジェスチョンを設定するには、次を実行します。
注釈
これらの設定を構成するには、 PUBLICコネクタのインスタンスとして機能するデータベース :ref:`<label-connector_servicenow_connector_name_v2> の ` スキーマで定義されているストアドプロシージャを使用します。
これらのストアドプロシージャを呼び出す前に、そのデータベースをセッションに使用するデータベースとして選択します。
たとえば、そのデータベースの名前が my_connector_servicenow の場合は、次のコマンドを実行します。
USE DATABASE my_connector_servicenow;
テテーブル同期の有効化または無効化¶
このセクションでは、 ServiceNow®でテーブルの同期を有効または無効にする方法について説明します。同期の有効化は、デフォルト構成とカスタム構成の両方で実行できます。
デフォルト構成を使用して複数のテーブルを有効にする¶
ServiceNow®内にある1つ以上のテーブルのデータ同期を有効にするには、次の引数を使用して ENABLE_TABLES ストアドプロシージャを呼び出します。
CALL ENABLE_TABLES(<tables_to_enable>);
条件:
tables_to_enableServiceNow®テーブル名の配列を指定します。
ServiceNow® UI に表示されるラベルではなく、テーブル名を使用します。テーブル名は、 ServiceNow 内にあるデータディクショナリテーブル で確認できます。ServiceNow® UIで、 System Definition » Tables に進みます。テーブルの名前を表示する Name 列。
たとえば、 table1、 table2、および table3 という名前のテーブルの同期を有効にするには、次のコマンドを実行します。
CALL ENABLE_TABLES(['table1', 'table2', 'table3']);
複数のテーブルを無効にする¶
ServiceNow®内にある特定のテーブルのテーブルデータ同期を無効にするには、次の引数を使用して DISABLE_TABLES ストアドプロシージャを呼び出します。
CALL DISABLE_TABLES(<tables_to_disable>);
条件:
tables_to_disableServiceNow®テーブル名の配列を指定します。
ServiceNow® UI に表示されるラベルではなく、テーブル名を使用します。テーブル名は、 ServiceNow 内にあるデータディクショナリテーブル で確認できます。ServiceNow® UIで、 System Definition » Tables に進みます。テーブルの名前を表示する Name 列。
たとえば、 table1 と table2 という名前のテーブルの同期を無効にするには、次のコマンドを実行します。
CALL DISABLE_TABLES(['table1', 'table2']);
テーブルを無効にすると、可能な限り早く同期が正常に停止されます。テーブルの同期が再度有効になると、一時停止された場所からインジェスチョンが再開されます。
注釈
すべてのテーブルの同期を無効にしても、 Snowflake Connector for ServiceNow® のコストの発生が停止するわけではありません。通知に関連するタスクなどのバックグラウンドタスクは引き続き実行できます。
ENABLE_TABLES と DISABLE_TABLES プロシージャは、指定されたテーブル名を CONFIGURED_TABLES ビューに追加します。
カスタム構成を使用して単一のテーブルを有効にする¶
ServiceNow®内にある特定のテーブルのカスタム構成によるデータの同期を有効にするには、次の引数を使用して
ENABLE_TABLEストアドプロシージャを呼び出します。CALL ENABLE_TABLE('<table_to_enable>', <table_config>);
条件:
table_to_enableServiceNow®テーブル名を指定します。
table_configOptional: Specifies an object with table ingestion configuration. If not specified, table ingestion uses the default configuration.
現在サポートされている構成は次のとおりです。
column filtering: Provide
include_columnsorexclude_columnsproperties with a list of column names.row filtering: Provide
filterproperty with a filter expression.synchronization schedule: Provide the
scheduleproperty with custom ingestion schedule.deletions synchronization enablement: Provide the
sync_deletionsboolean property.display values fetching: Provide the
fetch_display_valuesboolean property.
注釈
All of the custom configurations can be combined in a single object and used simultaneously for a single table ingestion.
Example:
The table
sys_audithas the following configuration:The table should be synchronized every Saturday at 10:00 AM UTC.
Only the columns
newvalueandreasonshould be ingested.Only the rows that have the
newvaluecolumn starting with the stringprivacyshould 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 });
列フィルタリングを使用して単一のテーブルを有効にする¶
Snowflakeの ServiceNow®テーブルのすべての列が不要な場合、コネクタはそれらを無視できます。たとえば、1行が最大行サイズ128 MB を超える場合に、列をスキップします。
指定した列を含むテーブルのインジェスチョンを有効にするには、次のコマンドを実行します。
CALL ENABLE_TABLE('<table_to_enable>', <table_config>);
条件:
table_to_enableServiceNow®テーブル名を指定します。
table_config列名のリストを持つ
include_columnsまたはexclude_columnsのプロパティを含むオブジェクト。sys_id、sys_created_on、およびsys_updated_onが存在する場合、それらは常に含まれます。included_columns配列に追加する必要はありません。また、コネクタによりインジェスチョンプロセスで使用されるため、excluded_columnsを使用して除外することはできません。
注釈
ServiceNow®の列は小文字で記述され、コネクタが使用する API は大文字と小文字を区別するため、指定された列に提供する値も小文字である必要があります。
注釈
include_columns と exclude_columns の両方を提供することはできません。include_columns をリスト表示したい場合は、 exclude_columns プロパティをスキップする必要があります。その逆も同様です。両方の配列が空でなく、競合する列がない場合、 include_columns が exclude_columns より優先されます。
include_columns と exclude_columns の両方が空の配列の場合、利用可能なすべての列がインジェストされます。
たとえば、列 ServiceNow、 u_table、 sys_id、 sys_updated_on が含まれる col_1 という名前の :code:`col_2`®テーブルに対して次を実行します。
CALL ENABLE_TABLE('u_table', { 'include_columns': ['sys_id', 'sys_updated_on'] });
これにより、指定したテーブルの sys_id と sys_updated_on 列のみがインジェストされますが、
CALL ENABLE_TABLE('u_table', { 'exclude_columns': ['col_1'] });
を呼び出すと、 sys_id、 sys_updated_on、そして col_2 もまたインジェストされます。
コネクタは提供された列を検証し、列のいずれかが ServiceNow®で利用できない場合は、有効化のリクエストを拒否します。ServiceNowAPI はインクルードモードのみをサポートしています。そのため、コネクタは提供された列配列をインクルード列リストに変換して、リクエストごとに ServiceNow®に送信します。列が含まれる URL は、 ServiceNow®で処理するには長すぎる可能性があります。コネクタは、 ENABLE_TABLE が呼び出されたときに、この制限を検証します。
各テーブルの列の構成は、 INCLUDED_COLUMNS ビューの CONFIGURED_TABLES 列で確認できます。インジェストされる列のリストを変更するには、まず特定のテーブルを無効化する必要があります。テーブルに対してテーブルフィルタリングが構成されている場合は、 ENABLE_TABLE プロシージャを使用してテーブルのみを有効にすることができます。テーブルのリストを引数として受け入れる ENABLE_TABLES は使用できません。
フラット化されたビューには、テーブルが有効化されたときに指定された列のみが含まれます。これらは、含まれる列のリストが変更されるたびに更新されます。列フィルタリングが構成されていない場合、ビューには使用可能なすべての列が含まれます。
注釈
構成の変更は、以前にインジェストされたデータには影響しません。列のフィルタリングは、新しくインジェストされた記録にのみ適用されます。以前にインジェストされたデータにフィルターを適用するには、テーブルを 再ロード する必要があります。
行フィルタリングを使用して単一のテーブルを有効にする¶
フィルター条件を指定することで、 ServiceNow®テーブルから選択した行のデータインジェスチョンを除外できます。たとえば、Snowflakeに不要な機密データを含む行を除外したり、コストを削減するために不要なデータを含む行を除外したりします。
指定した行フィルターを含むテーブルのインジェスチョンを有効にするには、次のコマンドを実行します。
CALL ENABLE_TABLE('<table_to_enable>', <table_config>);
条件:
table_to_enableServiceNow®テーブル名を指定します。
table_config有効な文字列であるフィルター式を持つ
row_filterプロパティを含むオブジェクト。現在サポートされているフィルター演算子は次のとおりです。
演算子
説明
例
AND両方が満たされる必要がある条件を結合する、論理演算子。
active = "true" AND impact = "2"OR少なくとも1つが満たされる必要がある条件を結合する、論理演算子。
重要
AND演算子よりも優先されます。次の 例 をご参照ください。tablename = "incident" OR tablename = "problem"=Returns
trueif the values are equal.priority = "1"!=Returns
trueif the values are not equal.state != "7"LIKEReturns
trueif the value contains the specified character sequence. [1]newvalue LIKE "privacy"NOT LIKEReturns
trueif the value doesn't contain a specified character sequence. [1]description NOT LIKE "test"STARTSWITHReturns
trueif the value starts with the specified character sequence. [1]description STARTSWITH "important"ENDSWITHReturns
trueif value ends with specified character sequence. [1]description ENDSWITH "important"INReturns
trueif the value is equal to any of the list of values. [2]tablename IN ("incident", "task", "cmdb_ci")NOT INReturns
trueif 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.
フィルター表現のルールと制限:
任意の2つのフィルター式は、
ANDまたはOR演算子で結合する必要があります。演算子はスペースで区切られ、大文字である必要があります。
値の式は二重引用符で囲む必要があります。
式は大文字と小文字を区別します。
式は、
sys_id、sys_updated_on、またはsys_created_on列では動作できません。
注釈
構成の変更は、以前にインジェストされたデータには影響しません。行のフィルタリングは、新しくインジェストされた記録にのみ適用されます。すでにインジェストされたデータにフィルターを適用するには、テーブルを 再ロード する必要があります。
例¶
テーブル
sys_auditのインジェスチョンを有効にし、INCIDENTテーブルのプライバシーインシデントに関連する行のみを同期するには、次を実行します。
CALL ENABLE_TABLE('sys_audit', {
'row_filter': 'tablename = "incident" AND fieldname = "cause" AND newvalue LIKE "privacy"'
});
テーブルの
incidentインジェスチョンを有効にし、次の条件で行のみを同期します。activeフィールドはtrueに等しく、sys_created_byフィールドはsupportで始まるか、adminで終わり、categoryフィールドはNetwork、Cloud 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")'
});
テーブル
incidentのインジェスチョンを有効にし、指定されたインシデント状態の行と指定された列のみをインジェストするには、次を実行します。
CALL ENABLE_TABLE('incident', {
'row_filter': 'incident_state IN ("1", "2", "3")', -- "New", "In Progress", "On Hold"
'include_columns': ['incident_state', 'description']
});
同期スケジュールの指定¶
Snowflake Connector for ServiceNow® は、指定されたスケジュールですべての ServiceNow®テーブルからSnowflakeにデータを同期します。デフォルトでは、すべてのテーブルが毎時(1時間ごとに)同期されます。
すべてのテーブルのデフォルトの同期スケジュールを変更するには、次の引数で CONFIGURE_DATA_INGESTION_SCHEDULE ストアドプロシージャを呼び出します。
CALL CONFIGURE_DATA_INGESTION_SCHEDULE(<schedule>);
条件:
schedule同期の頻度を指定します。次の JSON 値のいずれかを指定できます。
``{ 'type': 'continuous' }``は、ほぼリアルタイムのインジェスチョンスケジュールです。この同期スケジュールのテーブルでは、専用のワーカーを使用してデータを取り込み、並行して同期できるテーブルの最大数にカウントされません。詳細については、 コネクタのスケーリング をご参照ください。連続スケジュールで最大20個のテーブルを構成するできます。
警告
継続的なスケジュールがあるテーブルは、ServiceNow®インスタンスの負荷が増加します。さらに、コネクタウェアハウスが常に利用されるようになり、ウェアハウスのクレジット消費が増加します。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>);
条件:
table_name有効にする ServiceNow®テーブル名を指定します。
table_configテーブル同期の構成を指定する
scheduleプロパティを含むオブジェクト。詳細はscheduleストアドプロシージャのCONFIGURE_DATA_INGESTION_SCHEDULEをご参照ください。
たとえば、テーブル table_1 のインジェスチョンを有効にし、3時間ごとにデータを同期するには、以下のストアドプロシージャを呼び出します。
CALL ENABLE_TABLE('table_1', { 'schedule': { 'type': 'interval', 'value': '3h' } });
コネクタでは、同期が有効になっているテーブルごとに異なるスケジュールを指定することもできます。選択した一連のテーブルの同期スケジュールを変更するには、次の引数で CONFIGURE_TABLES_SCHEDULE ストアドプロシージャを呼び出します。
CALL CONFIGURE_TABLES_SCHEDULE(<table_names>, <schedule>);
条件:
table_names同期スケジュールを構成するテーブル名の配列を指定します。
schedule同期の頻度を指定します。詳細は
scheduleストアドプロシージャのCONFIGURE_DATA_INGESTION_SCHEDULEをご参照ください。
たとえば、毎週土曜日と日曜日の11:00 table_1 table_2 にテーブル PM と UTC をインジェストするには、以下のストアドプロシージャを呼び出します。
CALL CONFIGURE_TABLES_SCHEDULE(['table_1', 'table_2'], { 'type': 'custom', 'value': { 'hour': 23, 'day_of_week': '0,6' } });
デフォルトでは、コネクタはスケジュールされた開始時刻から3時間の時間ウィンドウでインジェスチョンの開始を試みます。コネクタが他のテーブルをインジェストしている場合など、その時間枠内にインジェスチョンを開始できない場合、現在スケジュールされた実行は実行されません。コネクタは次のスケジュールされた時間枠でインジェスチョンの実行を試みます。CONFIGURE_CUSTOM_SCHEDULE_START_INGESTION_WINDOW ストアドプロシージャを呼び出すと、時間枠の期間を変更できます。
CALL CONFIGURE_CUSTOM_SCHEDULE_START_INGESTION_WINDOW(<window_length>);
ここで、 window_length は ISO 8601期間形式のウィンドウの長さです。継続時間は1時間単位に切り上げられ、少なくとも1時間継続する必要があります。たとえば、値 'PT12H' は12時間継続するウィンドウを指定し、 'P2D' は2日間継続するウィンドウを指定します。
カスタムスケジュールを持つテーブルのみを有効にすると、この構成は構成されたテーブルのフラット化されたビューの作成とリフレッシュにかかる時間にのみ影響します。フラット化されたビューは、以下の条件が満たされた後、最初のインジェスチョンサイクルで作成されます。
メタデータテーブルのインジェスチョンが完了している
構成されたテーブルのインジェスチョンが開始されている。
メールアラートが有効になっている場合、カスタムスケジュールを使用するときにアラート頻度を Once per day に変更することをSnowflakeはお勧めします。
削除を同期させるかどうかの指定¶
コネクタが ServiceNow® から Snowflake に削除を同期するかどうかを指定できます。デフォルトでは、ジャーナル・テーブルが構成されている場合、コネクタは削除を同期します。しかし、特定のテーブルの削除同期を無効にし、グローバル構成は変更したくない場合があります。
削除の同期設定を指定してテーブル・インジェストを有効にするには、以下のコマンドを実行します。
CALL ENABLE_TABLE('<table_to_enable>', <table_config>);
条件:
table_to_enableServiceNow®テーブル名を指定します。
table_configsync_deletionsブール プロパティを含むオブジェクト。値がtrueにセットされている場合、コネクタはテーブルの削除を同期します。値がfalseにセットされている場合、コネクタはテーブルの削除を同期しません。
たとえば、 incident テーブルのインジェストを有効にし、削除の同期は行わないようにするには、次のコマンドを実行します。
CALL ENABLE_TABLE('incident', { 'sync_deletions': false });
注釈
デフォルトの構成を使用したい場合は、構成オブジェクトに sync_deletions プロパティを提供しないでください。ジャーナル・テーブルが構成されていない場合、コネクタは提供された構成に関係なく削除を同期しません。
表示値を取得するかどうかの指定¶
コネクタは、 ServiceNow® でサポートされているすべてのタイプのフィールドの表示値を取得できます。表示値とは、データベースに格納されている実際の値に対応する読み取り可能な値です。例えば、 1 という値を持つフィールドは、 High という表示値を持つかもしれません。表示値の詳細については、 ServiceNow®ドキュメント をご覧ください。
解決された値は、フラット化された表示で、接尾辞 __DISPLAY_VALUE が付いた別の列に表示されます。コネクタはSnowflakeタイプでテキスト列とブール列を作成しますが、その他のタイプ、例えば数値や日付値の可能な形式が異なる場合、表示値はバリアントとして保存されます。
警告
メタデータ・テーブルは表示値の取得には対応していません。
注釈
構成の変更は、以前にインジェストされたデータには影響しません。表示値の取得は、新しく取り込まれた記録にのみ適用されます。すでに取り込まれたデータの表示値を取得するには、テーブルを リロードする必要があります。
テーブルごとの表示値の取得¶
特定のテーブルの表示値の取得を有効にするには、 ENABLE_TABLE ストアドプロシージャを以下の引数で呼び出します。
CALL ENABLE_TABLE('<table_to_enable>', <table_config>);
条件:
table_to_enableServiceNow®テーブル名を指定します。
table_configfetch_display_valuesブール プロパティを含むオブジェクト。値がtrueにセットされている場合、コネクタはテーブルの表示値をフェッチします。値がfalse(デフォルト値) にセットされている場合、コネクタはテーブルの表示値を取得しません。
例えば、 incident テーブルのインジェストを有効にし、その表示値を取得するには、以下のコマンドを実行します。
CALL ENABLE_TABLE('incident', { 'fetch_display_values': true });
注釈
テーブルごとの構成は、グローバル構成の影響を受けません。
全テーブルのデフォルト値取得設定の構成¶
すべてのテーブルの表示値のフェッチを有効にするには、 CONFIGURE_DISPLAY_VALUE_FETCHING ストアドプロシージャを以下の引数で呼び出します。
CALL CONFIGURE_DISPLAY_VALUE_FETCHING(<fetch_display_values>);
条件:
fetch_display_valuesブール値を指定します。値を
trueに設定すると、コネクタはすべてのテーブルの表示値を取得します。値をfalse(デフォルト)に設定すると、コネクタはデフォルトでどのテーブルの表示値もフェッチしません。
例えば、すべてのテーブルの表示値の取得を有効にするには、以下のコマンドを実行します。
CALL CONFIGURE_DISPLAY_VALUE_FETCHING(true);
data range start timeの指定¶
デフォルトでは、 Snowflake Connector for ServiceNow® は対応する ServiceNow テーブルのすべての記録を同期します。sys_updated_on または sys_created_on 列(以降、time列 と呼ぶ)が存在するテーブルでは、data range start time*(つまり記録の対応する *time列 の値の下限)を設定することで、同期データの範囲を制限することができます。
このような構成では、対応する time列 の値が data range start timestamp より古い記録はインジェスト されません。このプロシージャで使用される対応する time列 は、増分更新と 同じ方法 で決定されます。
data range start timestamp 値を変更するには、 CONFIGURE_TABLES_RANGE_START ストアドプロシージャを次の引数で呼び出します。
CALL CONFIGURE_TABLES_RANGE_START(<table_names>, <range_start>);
条件:
table_namesdata range start time を構成するテーブル名の配列を指定します。
range_startdata range start time を TIMESTAMP_TZ フォーマットで指定するタイムスタンプ、または NULL で現在値の設定を解除します。
注釈
sys_updated_on 列と sys_created_on 列のいずれも存在しないテーブルには、data range start timeを設定できません。
テーブルのインジェスチョンがまだ開始されていない場合、data range start time の値は、最初のインジェスチョンで考慮されます。
テーブルのインジェスチョンが既に開始されている場合(リロード中など)、 data range start time 値は無視され、対応する time列 値が古すぎる記録をフィルターするために(別の) テーブルのリロード が必要になります。
したがって、テーブルの最初のインジェスチョンを開始する前(つまり、テーブルを有効にする前)に、data range start time を設定することをお勧めします。
例えば、テーブル table1 と table2 に必要な*time列*がある場合、これら2つのテーブルの data range start time を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'));
コマンド実行後:
例えば、テーブル
table1の場合、インジェスチョンがまだ開始されていない場合、2022-11-23 07:00:00 より前に対応する time 列 の値を持つすべての記録はインジェスト されません。例えば、テーブル
table2に対して、そのインジェスチョンが既に開始されている場合、このテーブルをリロードするまで、すべてのデータ同期で data range time start 値は無視されます。リロード中、2022-11-23 07:00:00より前に対応する time列 値を持つ記録はすべてインジェストされません。
data range start time の設定を解除することも可能です。例えば、テーブル table1 の設定を解除するには、次のコマンドを実行します。
CALL CONFIGURE_TABLES_RANGE_START(['table1'], NULL);
この場合も、テーブル table1 のインジェスチョンが既に開始されている場合、 ServiceNow®からすべての記録をインジェストするには、このテーブルのリロードが必要です。
注釈
data range start time を考慮してデータをロードすると、増分更新のパフォーマンスが低下するため、すべての履歴データをロードするよりも時間がかかる場合があります。
テーブルへのデータのリロード¶
コネクタを使用すると、テーブルのデータをリロードできます。これは、既にインジェストされたデータに構成の変更を適用する場合や、データがソースと最新であることを確認する場合に便利です。
リロードには2種類あります。完全なデータの置換にはフルと、リロードの条件を指定してデータの一部のみに影響を与えるためのフィルタリングがあります。
注釈
リロードごとに、現在のリロードされたテーブル構成が考慮されます。たとえば、これにより、どの記録がインジェストされるかを制限することができます。
メインテーブルの構成を確認するには、
CONFIGURED_TABLESビューを確認してください。リロードされたテーブルの結果の構成を確認するには、
RELOADED_TABLESビューをチェックしてください。
フルリロード¶
特定のテーブルにデータをリロードするには、 RELOAD_TABLE ストアドプロシージャを呼び出します。
CALL RELOAD_TABLE('<table_name>');
条件:
table_nameリロードするテーブルの名前を指定します。
RELOAD_TABLE ストアドプロシージャを呼び出すと、コネクタは次を実行します。
コネクタは、インジェスチョンのために元のテーブルを一時的に中断します。
注釈
テーブルのリロード中は、インジェスチョンのためにテーブルを再度有効にすることはできません。
コネクタは、インジェスチョン用に別の仮テーブルを作成します。
コネクタは、この新しい仮テーブルにデータをインジェストします。このテーブルは、 :ref:` サフィックスが付いた名前のテーブルとして CONNECTOR_STATS<label-monitoring_the_servicenow_connector_v2>
:code:`__tmpビューに表示されます。データがインジェストされた後、コネクタは元のテーブルのデータを仮テーブルのデータに置き換えます。
コネクタは仮テーブルを削除します。
コネクタは、インジェスチョンのために元のテーブルを再度有効にします。
このプロセス中、元のテーブル内にある既存のデータに対して引き続きクエリを実行できます。ただし、ServiceNow®テーブルのデータへの変更は、インジェスチョンプロセスが完了するまでSnowflakeテーブルに反映されません。
フィルターされたリロード¶
特定のテーブルにデータの一部のみをリロードするには、構成オブジェクトパラメーターを持つ RELOAD_TABLE ストアドプロシージャを呼び出します。
CALL RELOAD_TABLE('<table_name>', <config>);
条件:
table_nameリロードするテーブルの名前を指定します。
configリロードの構成を指定します。構成オブジェクトには、次のプロパティを含めることができます。
sys_ids:リロードされる ServiceNow®記録識別子の配列(sys_id)。data_reload_range_start_timeおよびdata_reload_range_end_time:TIMESTAMP_TZ 形式のデータ範囲を指定するタイムスタンプ値。指定したテーブルのインジェスチョンタイプに応じて、指定された時間枠のsys_updated_onまたはsys_created_onをもつレコードのみがリロードされます。conditions:ServiceNow®テーブルのフィールドに対する条件を指定する文字列式。条件を満たすレコードのみがリロードされます。式の構文は、行フィルタリング の構文と同じです。行フィルタリングが通常のテーブルで構成されている場合は、条件にも適用されます。
フルリロードとは対照的に、フィルタリングされたリロードは元のテーブルのデータを置き換えませんが、選択されたレコードのみを変更します。
Tip
大きなテーブルを初めてインジェスチョン用に有効にした後、フィルターされたリロードを使用して初期ロードが完了するのを待つことなく、関心のある記録の小さなサブセットをすばやくインジェストすることができます。
注釈
data_reload_range_start_time および data_reload_range_end_time 時間範囲と conditions フィルターは同時に使用できます。両方の条件を満たすレコードがリロードされます。
sys_ids は、他の構成プロパティと排他的です。
たとえば、テーブル incident の 1、2、3 の sys_id 値を持つレコードのみをリロードするために、以下のコマンドを実行します。
CALL RELOAD_TABLE('incident', { 'sys_ids': ['1', '2', '3'] });
2022-11-23 07:00:00 から 2022-11-23 08:00:00 UTC の間の``sys_updated_on`` 値を持ち、かつテーブル incident 内でまだアクティブなレコードのみをリロードするには、次のコマンドを実行します。
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"'
});
テーブルのリロードのキャンセル¶
テーブルにデータをリロードするプロセスをキャンセルするには、次の例に示すように CANCEL_RELOAD_TABLE ストアドプロシージャを使用します。
CALL CANCEL_RELOAD_TABLE('<table_name>');
条件:
table_nameリロードをキャンセルするテーブルの名前を指定します。
リロードをキャンセルすると、コネクタはリロード中に作成されたすべての仮オブジェクトをドロップします。その後、テーブルは通常の同期スケジュールの一部としてインジェスチョン可能になります。
読み取りレプリカの使用の構成¶
ServiceNow®環境で読み取りレプリカを使用するようにコネクタを構成するために、カスタムクエリカテゴリを設定できます。この構成により、コネクタは API リクエストをプライマリインスタンスの代わりに読み取りレプリカに送ることができます。これにより、ロードを分散してパフォーマンスを向上させることができます。
読み取りレプリカ使用用のカスタムクエリカテゴリを構成するには、次の引数を持つ CONFIGURE_QUERY_CATEGORY ストアドプロシージャを呼び出します。
CALL CONFIGURE_QUERY_CATEGORY('<query_category>');
条件:
query_categoryServiceNow® API リクエストに追加するクエリカテゴリ識別子を指定します。
構成が完了すると、コネクタは sysparm_query_category=<query_category> パラーメーターをすべての ServiceNow® API リクエストに追加します。これにより、ServiceNow® は、インスタンス構成に基づいてこれらのリクエストを適切な読み取りレプリカにルーティングできるようになります。
コネクタのインストール時に設定されたデフォルトのクエリカテゴリ値は list です。
たとえば、connector_replica という名前のクエリカテゴリを使用するようにコネクタを構成するには、次のコマンドを実行します。
CALL CONFIGURE_QUERY_CATEGORY('connector_replica');
テーブルの単一ページフェッチのサイズ構成¶
コネクタは、テーブルをページと呼ばれる小さなチャンクに分割することで、テーブルからデータをフェッチします。API®への ServiceNow リクエストごとに1ページがフェッチされます。
これを考慮して、コネクタは単一の API リクエスト内でフェッチされる行数を制限します。この制限はページサイズです。
コネクタは、次のプロセスを使用してページサイズを決定します。
最初にデフォルトのページサイズは10,000行に設定されています。
応答サイズを超えたためにインジェスチョン中にフェッチリクエストが失敗した場合、リクエストが成功するか、最終的なページサイズが1に設定されるまで、ページサイズは1000、100、10、1ずつ徐々に減少します。
成功したページサイズはコネクタ状態に保存され、この値は後続のリクエストで使用されます。
テーブルの現在のページサイズは TABLES_STATE ビューで確認できます。ページサイズを確認するには、次のコマンドを実行します。
SELECT PAGE_SIZE FROM TABLES_STATE WHERE TABLE_NAME = '<table_name>';
条件:
table_nameインジェストされる ServiceNow®テーブルの名前を指定します。
コネクタがページサイズを決定するために使用するプロセスは、非効率につながる可能性があります。このプロセスは、ページサイズを縮小するだけです。ページサイズは増加しません。これは、ページサイズがより低い値に設定される原因となる単一の大きな行がテーブルにある場合に発生する可能性があります。
この状況を回避するには、以下の例に示すように、 RESET_PAGE_SIZE ストアドプロシージャを呼び出してページサイズを手動でセットします。
CALL RESET_PAGE_SIZE('<table_name>');
or
CALL RESET_PAGE_SIZE('<table_name>', <page_size>);
条件:
table_nameインジェストされる ServiceNow®テーブルの名前を指定します。
page_size(オプション) 1つのページで取得する行数を指定します。プロバイダーが指定されていない場合は、コネクタ構成で指定されたデフォルト値が使用されます。デフォルト値および推奨値は10000です。最小値は1、最大値は25000です。
注釈
ページ・サイズは、構成されたジャーナル・テーブル(通常は sys_audit_delete)にもセットできます。パフォーマンスの低いジャーナル・テーブルからの削除の取り込み中に失敗が発生した場合は、ページ・サイズを下げることで、さらなる失敗を回避できます。
削除された行をコネクタに同期させるために、ジャーナル・テーブルの取り込みを明示的に有効にする必要はないことに注意してください。
インジェスチョン実行¶
所定のテーブルのインジェスチョン実行は、設定されたスケジュールに従ってトリガーされます。実行は、ループ内でソーステーブルから前の段落で述べたページに分割された関連するすべての行をダウンロードします。
初期ロードおよび更新
データのページは、フェッチされるとすぐに対応するイベントログテーブルに挿入されます。このステージでは、新しくフェッチされた変更は同期テーブルやフラット化ビューではまだ利用できません。終了すると、何らかのデータが返される限り、条件を更新した次のリクエストが発行されます。インジェスチョン実行が完了し、ソーステーブルにフェッチするデータがなくなると、非同期マージタスクがトリガーされ、最後のマージ以降に挿入されたイベントログのすべての変更が取得され、同期テーブルに適用されます。それが完了すると、データは同期テーブルとフラット化ビューで利用できるようになります。
切り捨ててロード
切り捨ててロードモードでは、インジェスチョン実行ごとに仮テーブルが作成されます。フェッチされた行の各ページは、まずこの仮テーブルに挿入されます(このテーブルは内部コネクタスキーマに存在し、コネクタユーザーは利用できません)。このステージでは、新しく取得された変更はまだ同期テーブルやフラット化された表示では利用できず、前回の実行でフェッチされたデータが表示されます。インジェスチョン実行が完了し、ソーステーブルに利用可能なデータがなくなると、同期テーブルの既存のデータは仮テーブルのデータに置き換えられます。フェッチされた行はすべてイベントログにも追加されます。最後に仮テーブルはドロップされます。
進捗状況のモニター
現在または過去のインジェスチョン実行のステータスを確認するには、 CONNECTOR_STATS ビューをクエリできます。STATUS 列に表示されます。データのフェッチに成功し、すべての変更が同期テーブルに適用された場合にのみ、DONE に設定されます。インジェスチョンを実行中、または同期テーブルへのマージまたは同期テーブル内の行の置換がまだ完了していない場合、ステータスは RUNNING となります。
次のステップ¶
ダイジェストを構成した後、 Snowflakeでの ServiceNow®データへのアクセス で説明した手順を実行し、ServiceNow®データを表示したりアクセスしたりします。