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 wietable_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;
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 |
---|---|---|
|
VARCHAR |
Der Wert von |
|
VARIANT |
Die unformatierten Daten des Datensatzes. |
|
BOOLEAN |
Gibt an, ob der Datensatz in ServiceNow gelöscht wurde oder nicht. |
|
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 | +----------------------------------+-------------------------+-------------+--------------------------+
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 | +--------+----------------+------------------+------------+
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 |
---|---|---|
|
VARCHAR |
Der Wert von |
|
VARCHAR |
Das Datum, an dem der Datensatz zuletzt in ServiceNow aktualisiert wurde. Wenn es in der Tabelle ServiceNow kein Feld |
|
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. |
|
VARIANT |
Die aktuellen Daten des Datensatz-Ereignisses. Bei DELETE-Ereignissen sind dies die Daten des Datensatzes zum Zeitpunkt der Löschung. |
|
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 zutable_name__event_log
hinzugefügt wird, fügt der Konnektor einen entsprechenden Datensatz zur Tabelletable_name
hinzu.Wenn für die gegebene
sys_id
einUPDATE
-Ereignis zur Ereignisprotokolltabelle hinzugefügt wird, aktualisiert der Konnektor den entsprechenden Datensatz mit dersys_id
in der Tabelletable_name
mit neuen Daten.Wenn ein
DELETE
-Ereignis auftritt, wird dasis_deleted
-Flag des entsprechenden Datensatzes intable_name
auftrue
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>" }
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>');
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 |
---|---|
|
Name des Referenzfeldes. |
|
Name des Feldes, auf das die Referenz zeigt. |
|
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>');
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>');
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 |
---|---|
|
|
|
Name der referenzierten Tabelle. Wenn die Referenz nicht aufgelöst werden kann, ist diese Eigenschaft „null“. |
|
ServiceNow-Link zu der betreffenden Zeile. Wenn die Referenzspalte oder das Referenzspaltenfeld |
|
Anzeigewert. Wenn die Referenz nicht aufgelöst werden kann, ist diese Eigenschaft „null“. |
|
|
|
Grund, warum die Referenz nicht aufgelöst werden konnte. Beispiel: |
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;
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 |
| | } |
| | } |
+-----------+------------------------------------+