Zugriff auf ServiceNow®-Daten in Snowflake

Der Snowflake-Konnektor für ServiceNow® unterliegt den Nutzungsbedingungen für Konnektoren.

Unter diesem Thema wird beschrieben, wie Sie über Ihr Snowflake-Konto auf ServiceNow-Daten zugreifen können.

Unter diesem Thema:

Für jede Tabelle in ServiceNow, die für die Synchronisierung konfiguriert ist, erstellt der Konnektor die folgenden Tabellen und Ansichten:

  • Eine Tabelle mit demselben Namen, die die Daten in Rohform enthält, wobei jeder Datensatz in einer einzigen VARIANT-Spalte enthalten ist.

  • Eine Tabelle table_name__event_log, die den Änderungsverlauf an den ServiceNow-Datensätzen enthält.

  • Eine Ansicht mit dem Namen table_name__view, die die Daten in vereinfachter Form enthält, wobei die Ansicht eine Spalte für jede Spalte der Originaltabelle und eine Zeile für jeden in der Originaltabelle vorhandenen Datensatz enthält.

  • Eine Ansicht namens table_name__view_with_deleted, die dieselben Daten wie table_name__view enthält sowie Zeilen für Datensätze, die in ServiceNow gelöscht wurden.

Bemerkung

Nach dem Start des Konnektors kann es einige Zeit dauern, bis die Ansichten erstellt sind.

Das Erstellen der Ansichten hängt von Daten in den ServiceNow-Tabellen sys_db_object, sys_dictionary und sys_glide_object ab. Der Konnektor lädt Metadaten aus diesen Tabellen, nachdem eine Business-Tabelle für die Synchronisierung aktiviert wurde. Nachdem die Metadatentabellen eingelesen wurden, erstellt eine Hintergrundaufgabe vereinfachte Ansichten (Flattening) der aktivierten Tabellen. Die Aufgabe wird so oft ausgeführt, wie es der Zeitplan für die häufigste Tabellenerfassung vorsieht. Nach dem Synchronisieren der Metadatentabellen erfasst die Aufgabe auch alle Tabellenschemaänderungen und aktualisiert die bereits erstellten Ansichten entsprechend (nur die Ansichten mit den Suffixen __view und __view_with_deleted, aber nicht mit __view_with_display_values).

Da es sich nicht um einen sofortigen Prozess handelt, ist der Status des Erstellungsprozesses der Ansicht unter der Ansicht ENABLED_TABLES verfügbar. Wenn das Erstellen der Ansicht zu lange dauert, kann die Ansicht CONNECTOR_ERRORS auch auf damit zusammenhängende Fehler überprüft werden.

In den folgenden Abschnitten wird erläutert, wie Sie die Berechtigungen für den Zugriff auf diese Daten erteilen und wie Sie auf die Daten dieser Tabellen und Ansichten zugreifen können.

Erteilen von Berechtigungen für den Zugriff auf die ServiceNow-Daten in Snowflake

Nachdem der Snowflake Connector for ServiceNow® die Daten mit Snowflake synchronisiert hat, kann jede Rolle mit den folgenden Berechtigungen auf die ServiceNow-Daten zugreifen:

  • USAGE-Berechtigung für die Datenbank und das Schema, die die ServiceNow-Daten in Snowflake enthalten, und

  • SELECT-Berechtigung auf Tabellen oder Ansichten innerhalb dieses Schemas

Snowflake empfiehlt, eine dedizierte Rolle mit diesen Berechtigungen zu erstellen, die den Benutzern zugewiesen werden kann, die Zugriff auf die erfassten ServiceNow-Daten benötigen.

Wenn Sie beispielsweise den Konnektor so konfiguriert haben, dass er die ServiceNow-Daten in der Datenbank dest_db und im Schema dest_schema speichert, können Sie eine Rolle mit dem Namen servicenow_data_reader_role erstellen und dieser Rolle die Berechtigungen für den Zugriff auf die Daten erteilen.

Das folgende Beispiel zeigt, wie Sie diese Berechtigungen erteilen:

CREATE ROLE servicenow_data_reader_role;
GRANT USAGE ON DATABASE dest_db TO ROLE servicenow_data_reader_role;
GRANT USAGE ON SCHEMA dest_db.dest_schema TO ROLE servicenow_data_reader_role;
GRANT SELECT ON FUTURE TABLES IN SCHEMA dest_db.dest_schema TO ROLE servicenow_data_reader_role;
GRANT SELECT ON FUTURE VIEWS IN SCHEMA dest_db.dest_schema TO ROLE servicenow_data_reader_role;
GRANT SELECT ON ALL TABLES IN SCHEMA dest_db.dest_schema TO ROLE servicenow_data_reader_role;
GRANT SELECT ON ALL VIEWS IN SCHEMA dest_db.dest_schema TO ROLE servicenow_data_reader_role;
Copy

Bemerkung

  • Führen Sie GRANT OWNERSHIP ON FUTURE TABLES IN SCHEMA nicht auf dem Schema aus, das die ServiceNow-Daten in Snowflake enthält. Ändern Sie auch nicht die Eigentümerschaft der Tabellen, die bereits durch den Konnektor erstellt wurden. Das Ändern der Eigentümerschaft verhindert, dass der Konnektor die Daten in der Tabelle erfassen kann.

  • Ändern Sie nicht die Eigentümerschaft der Ansichten in dem Schema, das die ServiceNow-Daten in Snowflake enthält. Das Ändern der Eigentümerschaft verhindert, dass der Konnektor die Ansichten aktualisiert, wenn Änderungen im ServiceNow-Tabellenschema auftreten.

Zugriff auf die Rohdaten

Für jede ServiceNow-Tabelle, die Sie synchronisieren, erstellt der Snowflake Connector for ServiceNow® eine neue Tabelle mit demselben Namen in der Datenbank und dem Schema der ServiceNow-Daten in Snowflake.

Wenn Sie beispielsweise den Konnektor so konfiguriert haben, dass die ServiceNow-Daten in der Datenbank dest_db und im Schema dest_schema gespeichert werden, und wenn Sie den Konnektor so konfiguriert haben, dass die Tabelle incident in ServiceNow synchronisiert wird, erstellt der Konnektor die Tabelle dest_db.dest_schema.incident.

Diese Tabelle enthält Rohdaten, die von ServiceNow erfasst wurden. Diese Tabelle enthält folgende Spalten:

Spalte

Datentyp

Beschreibung

sys_id

VARCHAR

Der Wert von sys_id des Datensatzes in ServiceNow.

raw

VARIANT

Die unformatierten Daten des Datensatzes.

is_deleted

BOOLEAN

Gibt an, ob der Datensatz in ServiceNow gelöscht wurde oder nicht.

last_update_date

TIMESTAMP_NTZ

Zeitpunkt der letzten Aktualisierung des Datensatzes in Snowflake. Beachten Sie, dass der angezeigte Zeitstempel in der UTC-Zeitzone ohne Offset angegeben wird, die von der Zeitzone der Datumsangaben abweichen kann, die in der ServiceNow-Instanz angezeigt werden.

Es folgt ein Beispiel für die Ausgabe einer SELECT-Anweisung, die die Daten der Tabelle dest_db.dest_schema.incident abruft:

SELECT * FROM DEST_DB.DEST_SCHEMA.INCIDENT LIMIT 5;

+----------------------------------+-------------------------+-------------+--------------------------+
| SYS_ID                           | RAW:ACTIVE              |  IS_DELETED | LAST_UPDATE_DATE         |
+----------------------------------+-------------------------+-------------+--------------------------+
| caa04d36db8ba0106e9643c81396197b | {"active": "true", ...} |  FALSE      |  2021-08-24 12:59:23.932 |
| cea045be1b03e010eac562c4bd4bcbb2 | {"active": "true", ...} |  FALSE      |  2021-08-24 12:59:23.932 |
| caa0c9bedb8be010f9f19c41ba961934 | {"active": "true", ...} |  FALSE      |  2021-08-24 12:59:23.932 |
| caa0c9bedb8be010f9f19c41ba961969 | {"active": "true", ...} |  FALSE      |  2021-08-24 12:59:23.932 |
| b9a0c53adb436410d6fa2b691396190a | {"active": "true", ...} |  FALSE      |  2021-08-24 12:59:23.932 |
+----------------------------------+-------------------------+-------------+--------------------------+
Copy

Zugriff auf die vereinfachten Daten

Für jede Tabelle, die Daten enthält, erstellt der Konnektor zwei vereinfachte Ansichten zu den Rohdaten. Die Namen der Ansichten sind die Namen der Tabelle mit den Suffixen __view und __view_with_deleted. So erstellt beispielsweise der Konnektor für die Tabelle ServiceNow mit dem Namen incident die folgenden Ansichten:

  • dest_db.dest_schema.incident__view

  • dest_db.dest_schema.incident__view_with_deleted

Die Ansicht mit dem Suffix __view enthält die Datensätze, die sich in der Tabelle ServiceNow befinden. Die Ansicht mit dem Suffix __view_with_deleted enthält die gleichen Datensätze sowie die Datensätze, die aus der ServiceNow-Tabelle gelöscht wurden.

Beachten Sie Folgendes:

  • Die Namen der Spalten in diesen Ansichten sind in Großbuchstaben geschrieben. Für den Zugriff auf diese Spalten können Sie keine Namen in Kleinbuchstaben verwenden.

  • Spalten mit Zeitangaben und Zeitstempeln werden immer in der Zeitzone UTC gespeichert, unabhängig von der in der ServiceNow-Instanz eingestellten Zeitzone. Je nach Konfiguration der ServiceNow-Instanz können die angezeigten Werte daher von den in der ServiceNow-Instanz angezeigten Werten abweichen. Der Unterschied bezieht sich nur auf die angezeigten Werte, die Zeitstempel sowohl in ServiceNow als auch in Snowflake beziehen sich auf denselben Zeitpunkt.

  • Es gibt keine Ansichten für leere Tabellen. Nachdem Daten in der Tabelle in ServiceNow erscheinen, wird die Ansicht erstellt.

  • Obwohl der Konnektor Änderungen am Schema verarbeitet, lädt er die Daten nicht neu.

    Dies hat zur Folge, dass bei Schemaänderungen die Datensätze des alten Schemas nicht aktualisiert werden.

Das folgende Beispiel zeigt die Ausgabe einer SELECT-Anweisung, die die Daten aus der Ansicht dest_db.dest_schema.incident_view abruft. In diesem Beispiel hat die Tabelle incident in ServiceNow Spalten mit den Namen ACTIVE, APPROVAL, CATEGORY und ESCALATION.

SELECT ACTIVE, APPROVAL, CATEGORY, ESCALATION
FROM DEST_DB.DEST_SCHEMA.INCIDENT__VIEW LIMIT 5;

+--------+----------------+------------------+------------+
| ACTIVE | APPROVAL       | CATEGORY         | ESCALATION |
+--------+----------------+------------------+------------+
| TRUE   | not requested  | software         | 0          |
| TRUE   | not requested  | Cloud Management | 0          |
| TRUE   | not requested  | software         | 0          |
| TRUE   | not requested  | network          | 0          |
| TRUE   | not requested  | database         | 0          |
+--------+----------------+------------------+------------+
Copy

Anzeigen der Ereignisprotokolle für eine Tabelle

Der Snowflake Connector for ServiceNow® kann die an den Datensätzen in ServiceNow vorgenommenen Änderungen nachverfolgen. Diese Verfolgungsinformationen werden in Tabellen, den so genannten Ereignisprotokollen, gespeichert.

Für jede ServiceNow-Tabelle, für die die Synchronisierung aktiviert ist, erstellt der Konnektor eine Ereignisprotokolltabelle in Snowflake mit dem Namen <destination_db>.<destination_schema>.<table_name>__event_log.

Jede Ereignisprotokolltabelle enthält die folgenden Spalten:

Spalte

Datentyp

Beschreibung

sys_id

VARCHAR

Der Wert von sys_id des Datensatzes in ServiceNow.

sys_updated_on

VARCHAR

Das Datum, an dem der Datensatz zuletzt in ServiceNow aktualisiert wurde. Wenn es in der Tabelle ServiceNow kein Feld sys_updated_on gibt, enthält diese Spalte Nullwerte. Beachten Sie, dass der angezeigte Zeitstempel in der UTC-Zeitzone ohne Offset angegeben wird, die von der Zeitzone der Datumsangaben abweichen kann, die in der ServiceNow-Instanz angezeigt werden.

event_date

TIMESTAMP_NTZ

Das Datum, an dem das Ereignis in das Ereignisprotokoll eingefügt wurde. Beachten Sie, dass der angezeigte Zeitstempel in der UTC-Zeitzone ohne Offset angegeben wird, die von der Zeitzone der Datumsangaben abweichen kann, die in der ServiceNow-Instanz angezeigt werden.

raw

VARIANT

Die aktuellen Daten des Datensatz-Ereignisses. Bei DELETE-Ereignissen sind dies die Daten des Datensatzes zum Zeitpunkt der Löschung.

event_type

VARCHAR

Gibt an, ob der Datensatz aus ServiceNow eingefügt, aktualisiert oder gelöscht wurde.

Das Ereignisprotokoll spiegelt den Verlauf der Datenänderungen in der entsprechenden Tabelle ServiceNow wider. Wenn beispielsweise ein neuer Datensatz in die Tabelle u_ip_port in ServiceNow eingefügt wird, wird der Tabelle dest_db.dest_schema.u_ip_port__event_log in Snowflake ein Datensatz mit dem Ereignistyp event_type hinzugefügt, der auf INSERT gesetzt ist.

Ebenso wird beim Aktualisieren oder Löschen eines Datensatzes in einer Tabelle in ServiceNow ein Datensatz mit event_type auf UPDATE oder DELETE in der Tabelle dest_db.dest_schema.u_ip_port__event_log hinzugefügt.

Die Tabellen in Snowflake, die die Rohdaten (dest_db.dest_schema.table_name) enthalten, werden von den entsprechenden Ereignisprotokolltabellen (dest_db.dest_schema.table_name__event_log) abgeleitet. Beispiel:

  • Wenn ein Datensatz für ein INSERT-Ereignis zu table_name__event_log hinzugefügt wird, fügt der Konnektor einen entsprechenden Datensatz zur Tabelle table_name hinzu.

  • Wenn für die gegebene sys_id ein UPDATE-Ereignis zur Ereignisprotokolltabelle hinzugefügt wird, aktualisiert der Konnektor den entsprechenden Datensatz mit der sys_id in der Tabelle table_name mit neuen Daten.

  • Wenn ein DELETE-Ereignis auftritt, wird das is_deleted-Flag des entsprechenden Datensatzes in table_name auf true gesetzt.

Abrufen des Anzeigewerts eines Referenzfelds

In ServiceNow-Tabellen sind einige Felder Referenzfelder, die Referenzen auf Datensätze in anderen Tabellen enthalten.

Im folgenden Beispiel ist das Feld opened_by in der Tabelle incident ein Referenzfeld, das eine Referenz auf den Datensatz mit der sys_id <sys_id> in einer anderen Tabelle (sys_user) enthält:

{
  "link": "https://testingatt1.service-now.com/api/now/table/sys_user/<sys_id>",
  "value": "<sys_id>"
}
Copy

Um die Referenzfelder in der Tabelle anzuzeigen, rufen Sie die gespeicherte Prozedur SHOW_REFERENCES_OF_TABLE mit dem folgenden Argument auf:

CALL SHOW_REFERENCES_OF_TABLE('<table_name>');
Copy

Wobei:

table_name

Gibt den Namen der Tabelle an, für die Sie die Referenzfelder anzeigen möchten.

Die gespeicherte Prozedur durchsucht das Schema der Tabelle und gibt eine JSON-Liste der Objekte zurück, die die folgenden Eigenschaften enthält:

Eigenschaft

Beschreibung

columnName

Name des Referenzfeldes.

referencedColumnName

Name des Feldes, auf das die Referenz zeigt.

referencedTableName

Name der referenzierten Tabelle.

Bemerkung

Um diese Prozedur verwenden zu können, muss der Konnektor den Benutzer ServiceNow verwenden, dem die ServiceNow-Rolle admin zugewiesen wurde. Ohne diese Rolle gibt die Prozedur einen Autorisierungsfehler zurück. Weitere Informationen dazu finden Sie unter Vorbereitung der ServiceNow-Instanz.

Aktivieren der Datensynchronisierung für referenzierte Tabellen

Wenn eine Tabelle Referenzen auf andere Tabellen enthält, können Sie die Datensynchronisierung mit den referenzierten Tabellen aktivieren. Um Daten für referenzierte Tabellen zu synchronisieren, rufen Sie die gespeicherte Prozedur ENABLE_REFERENCED_TABLES mit dem folgenden Argument auf:

CALL ENABLE_REFERENCED_TABLES('<table_name>');
Copy

Wobei:

table_name

Gibt den Namen der Tabelle (mit den Tabellenreferenzfeldern) an, für die Sie die Datensynchronisierung aktivieren möchten.

Bemerkung

Um diese Prozedur verwenden zu können, muss der Konnektor den Benutzer ServiceNow verwenden, dem die ServiceNow-Rolle admin zugewiesen wurde. Ohne diese Rolle gibt die Prozedur einen Autorisierungsfehler zurück. Weitere Informationen dazu finden Sie unter Vorbereitung der ServiceNow-Instanz.

Erstellen einer Ansicht, die Referenzfelder enthält

Wenn die Tabelle, die die Referenzfelder enthält, und die Tabellen, auf die diese Felder verweisen, verarbeitet wurden, können Sie eine Ansicht erstellen, in der die Referenzen durch Anzeigewerte ersetzt sind.

Um diese Ansicht zu erstellen, rufen Sie die gespeicherte Prozedur CREATE_VIEW_WITH_DISPLAY_VALUES auf.

CALL CREATE_VIEW_WITH_DISPLAY_VALUES('<table_name>');
Copy

Wobei:

table_name

Gibt den Namen der Tabelle mit den Tabellenreferenzfeldern an, für die Sie eine Ansicht mit Anzeigewerten erstellen möchten.

Bemerkung

Es werden nur Referenzfelder mit der sys_id als Referenzschlüssel unterstützt.

Bemerkung

Um diese Prozedur verwenden zu können, muss der Konnektor den Benutzer ServiceNow verwenden, dem die ServiceNow-Rolle admin zugewiesen wurde. Ohne diese Rolle gibt die Prozedur einen Autorisierungsfehler zurück. Weitere Informationen dazu finden Sie unter Vorbereitung der ServiceNow-Instanz.

Nachdem die Ansicht erfolgreich erstellt wurde, gibt die gespeicherte Prozedur den Namen der neu erstellten Ansicht zurück. Der Name der Ansicht ist der Tabellenname mit dem angefügten Suffix __view_with_references. So erstellt die gespeicherte Prozedur beispielsweise für eine ServiceNow-Tabelle namens incident die Ansicht namens incident__view_with_references. Referenzfelder werden durch Anzeigewerte ersetzt, und für jedes Referenzfeld wird eine neue Metadatenspalte hinzugefügt.

Die Spalte mit dem Anzeigewert hat den gleichen Namen wie die zu ersetzende Referenzspalte und kann „null“ sein, wenn der Anzeigewert „null“ ist oder die Referenz nicht aufgelöst werden kann. Der Name der Metadatenspalte ist der Name der Referenzspalte mit angehängtem Suffix __metadata. So erstellt die gespeicherte Prozedur beispielsweise für eine Referenzspalte namens user eine Spalte namens user__metadata. Der Inhalt dieser Spalte ist ein JSON-Objekt mit einem Feld namens reference_field und den folgenden Eigenschaften:

Eigenschaft

Beschreibung

key

sys_id der betreffenden Zeile. Wenn die Referenzspalte oder das Referenzspaltenfeld value „null“ ist, ist diese Eigenschaft ebenfalls „null“.

reference_table

Name der referenzierten Tabelle. Wenn die Referenz nicht aufgelöst werden kann, ist diese Eigenschaft „null“.

link

ServiceNow-Link zu der betreffenden Zeile. Wenn die Referenzspalte oder das Referenzspaltenfeld link „null“ ist, ist diese Eigenschaft ebenfalls „null“.

display_value

Anzeigewert. Wenn die Referenz nicht aufgelöst werden kann, ist diese Eigenschaft „null“.

resolved

true, wenn der Anzeigewert aufgelöst werden kann. false, wenn der Konnektor die Referenz nicht auflösen kann.

reason

Grund, warum die Referenz nicht aufgelöst werden konnte. Beispiel: Display value is not ingested yet. Wenn die Referenz aufgelöst werden kann, wird diese Eigenschaft nicht angezeigt.

Im folgenden Beispiel wird gezeigt, wie ein Spaltenpaar aus Anzeigewerten und Metadaten in einer mit der gespeicherten Prozedur CREATE_VIEW_WITH_DISPLAY_VALUES erstellten Ansicht aussieht. Die Beispieltabelle incident hat die Spalte opened_by, die (über die sys_id als Referenzschlüssel) auf die Tabelle sys_user verweist.

Die von der gespeicherten Prozedur erstellte Ansicht incident__view_with_references löst die Referenz auf, sodass die angezeigten Werte mit einer einfachen SELECT-Anweisung abgerufen werden können.

SELECT OPENED_BY, OPENED_BY__METADATA
  FROM DEST_DB.DEST_SCHEMA.INCIDENT__VIEW_WITH_REFERENCES;
Copy

Dieser Befehl zeigt Informationen im folgenden Format an:

+-----------+------------------------------------+
| OPENED_BY | OPENED_BY__METADATA                |
+-----------+------------------------------------+
| "JOHN"    | {                                  |
|           |   "reference_field": {             |
|           |     "display_value": "JOHN",       |
|           |     "key": "b177...",              |
|           |     "link": "https://...",         |
|           |     "reference_table": "sys_user", |
|           |     "resolved": true               |
|           |   }                                |
|           | }                                  |
+-----------+------------------------------------+