Dépannage du connecteur¶
Snowflake Connector pour ServiceNow® V2 est soumis aux Conditions de Snowflake Connector.
Ce chapitre fournit des lignes directrices pour la résolution des problèmes liés au Snowflake Connector for ServiceNow®V2.
Dans ce chapitre :
Note
Les sections suivantes décrivent les procédures stockées définies dans le schéma PUBLIC de l”application de connecteur. Avant d’appeler ces procédures stockées, sélectionnez cette application comme base de données à utiliser pour la session.
Par exemple, si cette application est nommée my_connector_servicenow
, appelez la procédure de connecteur TEST_CONNECTION
via les commandes suivantes :
USE APPLICATION my_connector_servicenow;
CALL TEST_CONNECTION();
Résolution des problèmes lors de l’installation du connecteur¶
Les problèmes les plus courants lors de l’installation du connecteur sont liés aux ACLs définies sur les tables de métadonnées telles que sys_db_object
, sys_dictionary
et sys_glide_object
. De plus, le connecteur nécessite un accès à la table sys_table_rotation
pour déterminer la stratégie d’ingestion correcte et éventuellement à la table de journaux (généralement sys_audit_delete
) pour propager la suppression des données.
Erreurs d’étape d’authentification¶
Des problèmes peuvent survenir lors de la connexion à ServiceNow dans l’assistant d’installation ou lors de l’exécution manuelle de la procédure SET_CONNECTION_CONFIGURATION. Si vous rencontrez des erreurs lors de cette étape, assurez-vous que l’utilisateur employé pour installer le connecteur a accès à la table sys_db_object
.
Les codes de statut d’erreur susceptibles d’être associés à des problèmes d’ACL dans l’objet JSON renvoyé par la procédure SET_CONNECTION_CONFIGURATION
sont les suivants :
REQUEST_FAILED
Vous pouvez effectuer la requête ci-dessous similaire à celle du connecteur pour vérifier l’accès. Tant que la requête ne renvoie pas le résultat prévu, il ne sera pas possible d’installer le connecteur. Par exemple, si vous utilisez curl pour envoyer la requête HTTP :
# checking access to the sys_db_object table
curl -u '<username>:<password>' "https://<servicenow_instance>.service-now.com/api/now/table/sys_db_object?sysparm_limit=1"
- Où :
servicenow_instance
Spécifie le nom de votre instance ServiceNow®.
username
etpassword
Spécifiez les identifiants de connexion de votre instance ServiceNow®.
Exemples de réponse :
Au moins certains champs sont renvoyés - l’utilisateur dispose des autorisations nécessaires pour accéder à la table.
La réponse est vide - l’utilisateur est autorisé à accéder à la table, mais pas à l’enregistrement traité. Cela pourrait causer des problèmes ultérieurement.
La réponse contient une erreur - l’utilisateur n’a pas les autorisations nécessaires pour accéder à la table.
Valider les erreurs d’étapes associées à la source¶
Des problèmes peuvent survenir lors de la validation de la source dans l’assistant d’installation ou lors de l’exécution manuelle de la procédure FINALIZE_CONNECTOR_CONFIGURATION. Si vous rencontrez des erreurs lors de cette étape, assurez-vous que l’utilisateur employé pour installer le connecteur dispose des autorisations nécessaires pour accéder aux tables de métadonnées.
Les codes de statut d’erreur susceptibles d’être associés à des problèmes d’ACL dans l’objet JSON renvoyé par la procédure FINALIZE_CONNECTOR_CONFIGURATION
sont les suivants :
METADATA_TABLE_ACCESS_VALIDATION_ERROR
JOURNAL_TABLE_ACCESS_VALIDATION_ERROR
Vous pouvez effectuer les requêtes ci-dessous similaires à celles du connecteur pour vérifier l’accès. Tant que les requêtes ne renvoient pas les résultats prévus, il ne sera pas possible d’installer le connecteur. Par exemple, si vous utilisez curl pour envoyer la requête HTTP :
# checking access to the sys_db_object table
# expected fields in the result object: sys_id, super_class, name
curl -u '<username>:<password>' "https://<servicenow_instance>.service-now.com/api/now/table/sys_db_object?sysparm_fields=sys_id,super_class,name&sysparm_limit=1&sysparm_query=name=sys_db_object"
# checking access to the sys_dictionary table
# expected fields in the result object: sys_id, name, element, internal_type
curl -u '<username>:<password>' "https://<servicenow_instance>.service-now.com/api/now/table/sys_dictionary?sysparm_fields=sys_id,name,element,internal_type&sysparm_limit=1&sysparm_query=name=sys_dictionary"
# checking access to the sys_glide_object table
# expected fields in the result object: sys_id, name, scalar_type
curl -u '<username>:<password>' "https://<servicenow_instance>.service-now.com/api/now/table/sys_glide_object?sysparm_fields=sys_id,name,scalar_type&sysparm_limit=1&sysparm_query=name=datetime"
# checking access to the sys_table_rotation table
# expected fields in the result object: sys_id, name
curl -u '<username>:<password>' "https://<servicenow_instance>.service-now.com/api/now/table/sys_table_rotation?sysparm_fields=sys_id,name&sysparm_limit=1&sysparm_query=name=syslog"
# (optional) - check only if deletions auditing is going to be used
# checking access to the journal table
# if known, "&sysparm_query=tablename=<table_name>" or "&sysparm_query=documentkey=<sys_id>" can be appended to the request
# expected fields in the result object: sys_id, sys_created_on, documentkey, tablename
curl -u '<username>:<password>' "https://<servicenow_instance>.service-now.com/api/now/table/<journal_table>?sysparm_fields=sys_id,sys_created_on,documentkey,tablename&sysparm_limit=1"
- Où :
servicenow_instance
Spécifie le nom de votre instance ServiceNow®.
username
etpassword
Spécifiez les identifiants de connexion de votre instance ServiceNow®.
journal_table
Spécifie le nom de votre table ServiceNow® utilisée pour l’audit des suppressions. La valeur est généralement
sys_audit_delete
.
Exemples de réponse :
Tous les champs prévus sont présents dans la réponse - l’utilisateur dispose des autorisations nécessaires.
Il manque certains des champs prévus - l’utilisateur ne dispose pas des autorisations nécessaires sur toutes les colonnes.
La réponse est vide - l’utilisateur ne dispose pas des autorisations nécessaires sur toutes les lignes.
La réponse contient une erreur - l’utilisateur ne dispose pas des autorisations nécessaires sur la table.
Vérification de la connexion à l’instance ServiceNow®¶
Pour vérifier que Snowflake Connector for ServiceNow®V2 peut accéder à l’instance ServiceNow®, appelez la procédure stockée TEST_CONNECTION
:
CALL TEST_CONNECTION();
Si le connecteur est correctement configuré, la procédure stockée renvoie la réponse suivante :
{
"responseCode": "OK",
"message": "Test request to ServiceNow succeeded."
}
Vérification de l’accès à la table spécifique dans l’instance ServiceNow®¶
Pour vérifier que Snowflake Connector for ServiceNow®V2 peut accéder aux données de la table spécifique dans l’instance ServiceNow®, appelez la procédure stockée TEST_TABLE_ACCESS
:
CALL TEST_TABLE_ACCESS('<table_name>');
Où :
table_name
Spécifie le nom d’une table dans l’instance ServiceNow®.
Si le connecteur est correctement configuré et que les données sont disponibles pour l’utilisateur utilisé par le connecteur, la procédure stockée renvoie la réponse suivante :
{
"responseCode": "OK",
"message": "Test request to ServiceNow® succeeded."
}
Note
Si la table est vide ou si toutes les lignes sont masquées au connecteur à cause d’ACLs, le message indiquera : Test request to ServiceNow® succeeded but it didn't return any record.
. Dans ce cas, assurez-vous que la table est réellement vide. Si des lignes sont visibles depuis l’UI, cela signifie que le connecteur n’est pas en mesure de les ingérer.
Comparaison des nombres de lignes des tables dans ServiceNow® et Snowflake¶
Pour comparer le nombre de lignes actuel d’une table dans ServiceNow® et dans Snowflake, appelez la procédure CHECK_ROW_COUNT
:
CALL CHECK_ROW_COUNT('<table_name>');
ou
CALL CHECK_ROW_COUNT('<table_name>', <max_sys_created_on>);
Où :
table_name
Spécifie le nom d’une table dans l’instance ServiceNow®.
max_sys_created_on
Spécifie un filtre facultatif supplémentaire sur la valeur maximale de la colonne
sys_created_on
. Seules les lignes correspondant à ce filtre seront comptabilisées. La valeur par défaut de ce paramètre estNULL
, ce qui signifie que le filtre ne sera pas appliqué. Ce paramètre permet de comparer uniquement les comptes d’enregistrements déjà ingérés dans Snowflake, sans tenir compte des enregistrements récemment créés dans ServiceNow®, mais pas encore ingérés dans Snowflake.
L’exemple suivant montre comment appeler la procédure stockée CHECK_ROW_COUNT
avec le paramètre max_sys_created_on
:
CALL CHECK_ROW_COUNT('sys_db_object', '2021-09-10 12:34:56');
Si la procédure expire, c’est qu’elle n’a pas pu utiliser l’API stats
pour déterminer le nombre de lignes de la table dans ServiceNow®. Cela peut signifier que le nombre de lignes de cette table est trop important pour être compté par cette API.
Note
Le nombre de lignes renvoyé peut varier. Une table ServiceNow® peut contenir plus de lignes que la table Snowflake équivalente. Cela peut être dû aux règles des listes de contrôle d’accès (ACLs) définies pour une table donnée dans ServiceNow®.
Le connecteur utilise différents points de terminaison pour récupérer des informations sur le nombre de lignes d’une table ServiceNow®. Le connecteur utilise stats
pour les informations relatives à une table, notamment le nombre de lignes. Il utilise table
pour ingérer les données dans Snowflake.
Vérification du statut de l’ingestion d’une ligne¶
Pour vérifier le statut de l’ingestion d’une ligne à tous les endroits possibles dans ServiceNow® et Snowflake, appelez la procédure CHECK_RECORD_HISTORY
:
CALL CHECK_RECORD_HISTORY('<table_name>', '<sys_id>');
Où :
table_name
Spécifie le nom d’une table dans l’instance ServiceNow®.
sys_id
Spécifie le
sys_id
de la ligne à vérifier.
La procédure renvoie un objet JSON contenant les propriétés suivantes :
Propriété |
Description |
---|---|
|
Nom de la table. |
|
Identificateur unique de la ligne dans ServiceNow®. |
|
Statut de l’ingestion de la ligne. |
|
|
|
|
|
|
|
Tableau d’objets JSON représentant les entrées dans le journal des événements pour la ligne avec ce Chaque objet contient les propriétés suivantes, qui correspondent aux colonnes du tableau de journal des événements qui spécifient les horodatages et les types d’événements de la modification des données :
|
Déterminer si une table fait l’objet d’un audit de suppression¶
Le Snowflake Connector for ServiceNow®V2 s’appuie sur l’audit pour propager la suppression des enregistrements à Snowflake.
Pour vérifier qu’une table donnée dans ServiceNow® est configurée de sorte à auditer la suppression d’enregistrements, appelez la procédure stockée CHECK_IF_AUDIT_ENABLED
:
CALL CHECK_IF_AUDIT_ENABLED('<table_name>');
Où :
table_name
Spécifie le nom d’une table dans l’instance ServiceNow®.
La procédure renvoie un objet JSON contenant les propriétés suivantes :
Propriété |
Description |
---|---|
|
Valeur |
|
Valeur de l’attribut |
|
Valeur de l’attribut |
|
Explication lisible par l’homme indiquant si l’audit est activé sur la table en fonction des valeurs des champs
|
Obtention des données de dépannage¶
Pour obtenir des données de dépannage, appelez la procédure stockée GET_TROUBLESHOOTING_DATA
:
CALL GET_TROUBLESHOOTING_DATA(<from_timestamp>, <to_timestamp>);
Où :
from_timestamp
Spécifie le début de la plage de dates (dans le fuseau horaire UTC) pour laquelle les données doivent être extraites.
to_timestamp
Spécifie la fin de la plage de dates (dans le fuseau horaire UTC) pour laquelle les données doivent être extraites.
Cette procédure stockée renvoie les données suivantes sous forme de tableau :
Informations sur la configuration
Erreurs rencontrées par le connecteur
Historique d’ingestion
L’exemple suivant montre comment appeler cette procédure stockée :
CALL GET_TROUBLESHOOTING_DATA('2024-02-05 10:00:00', '2024-02-10 22:30:00');
Vous pouvez enregistrer les données renvoyées au format CSV pour les envoyer à l’assistance de Snowflake.
Récupération d’un objet inaccessible¶
Le connecteur requiert plusieurs objets de base de données qui sont externes à l’application de connecteur. Si ces objets ne sont pas disponibles, le connecteur échouera ou cessera de fonctionner correctement. Les situations dans lesquelles les objets peuvent devenir indisponibles sont les suivantes :
Destruction d’un objet.
Recréation d’un objet sans conservation ou restauration des autorisations requises.
Révocation des autorisations nécessaires à l’utilisation de ces objets par le connecteur.
Dans la plupart des cas, vous pouvez restaurer ces objets manuellement en les recréant et en leur accordant les privilèges nécessaires. Les sections suivantes décrivent comment restaurer différents objets.
Restauration de l’entrepôt de connecteur¶
Si le connecteur perd l’accès à son entrepôt, configurez-en un nouveau en appelant la procédure stockée UPDATE_WAREHOUSE.
Restauration de la base de données et du schéma des données ServiceNow®¶
Si la base de données ou le schéma des données ServiceNow® est supprimé, la seule façon de récupérer cet élément est d’exécuter la commande UNDROP. Si cette commande n’est pas disponible, vous devez réinstaller le connecteur et ingérer de nouveau les données ServiceNow®.
Si une vue contenant les données ServiceNow® est supprimée, elle devrait être automatiquement recréée lors de l’exécution suivante de la tâche d’arrière-plan responsable de sa création.
Si l’une des tables contenant les données ServiceNow® (soit les tables de journaux d’événements, soit les tables de données brutes) est supprimée et que vous ne pouvez pas utiliser la commande UNDROP TABLE pour la récupérer, procédez comme suit pour redémarrer l’ingestion de la table ServiceNow® :
Assurez-vous que les tables de journaux d’événements et les tables de données brutes de cette table ServiceNow® sont supprimées.
Utilisez la procédure DELETE_TABLE.
Restauration de l’intégration de notification du connecteur¶
Si le connecteur perd l’accès à l’objet d’intégration de notification, effectuez à nouveau les procédures de configuration des alertes en recréant l’objet d’intégration de notification si nécessaire.
Si les notifications par e-mail sont configurées via Snowsight il suffit de les désactiver et de les réactiver pour restaurer les objets externes nécessaires.
Détermination de la raison pour laquelle il manque des colonnes dans les vues aplaties¶
Le connecteur crée des vues aplaties dans le schéma de destination en fonction des métadonnées ServiceNow®. Il existe plusieurs raisons pour lesquelles il peut manquer une colonne côté Snowflake.
Vérification de la présence de métadonnées de colonne dans Snowflake¶
Pour vérifier si les métadonnées de colonne sont présentes dans la table sys_dictionary
sur Snowflake, exécutez la requête suivante :
SELECT * FROM <dest_db>.<dest_schema>.sys_dictionary__view WHERE name = '<table_name>' AND element = '<column_name>';
Si la table que vous étudiez a des tables parentes (héritées d’une autre table dans ServiceNow®) et que la colonne que vous recherchez a été ajoutée à la table parente, vous devez utiliser le nom de la table parente à la place.
Pour obtenir la liste de toutes les tables dont hérite la table qui vous intéresse, utilisez la requête suivante :
SELECT
sys_id,
name,
PARSE_JSON(super_class):value::string AS super_class_sys_id
FROM <dest_db>.<dest_schema>.sys_db_object__view
START WITH name = '<table_name>'
CONNECT BY sys_id = PRIOR super_class_sys_id;
Si des lignes sont renvoyées, cela signifie que les métadonnées de la colonne ont été correctement ingérées dans Snowflake, mais que la vue n’a pas encore été actualisée. Vérifiez le statut et si :
la vue a été actualisée récemment, mais que la colonne n’est toujours pas présente, contactez l’assistance.
la vue n’a pas encore été actualisée, attendez la planification d’ingestion suivante.
Si un résultat vide est renvoyé, cela signifie que le connecteur n’a pas encore ingéré de métadonnées pour cette colonne. Vous devez valider côté ServiceNow® que l’enregistrement est visible par le connecteur et que son horodatage est correct.
Afficher le statut d’actualisation¶
Pour savoir quand les vues d’une table donnée ont été actualisées pour la dernière fois et si l’opération s’est effectuée correctement, exécutez la requête suivante :
SELECT flattened_views_status, flattened_views_last_updated FROM tables_state WHERE table_name = '<table_name>';
Si la dernière actualisation a échoué, il peut être souhaitable d’interroger la table d’événements et de rechercher les erreurs signalées par le connecteur.
Afficher la disponibilité des métadonnées des colonnes ServiceNow®¶
Il est possible que l’absence de certaines colonnes dans la vue aplatie s’explique par le fait que les métadonnées des colonnes ne peuvent pas être ingérées par le connecteur. Cela peut être dû au fait que les ACLs empêchent le renvoi de la ligne de la table sys_dictionary
par l’API Table. Une autre raison possible est une valeur d’horodatage passée dans la colonne sys_updated_on
. Il peut également arriver que la définition de la colonne/table ait été importée d’une autre instance de ServiceNow®. Pour déterminer si le connecteur peut accéder aux métadonnées des colonnes, exécutez la requête GET au point de terminaison suivant :
https://<servicenow_instance>.service-now.com/api/now/table/sys_dictionary?sysparm_query=name=<table_name>^element=<column_name>
Si un résultat vide est renvoyé, cela signifie que le connecteur ne peut pas accéder à la colonne. La colonne peut être protégée par une ACL ou ne pas être présente.
Si une définition de colonne a été renvoyée, examinez la valeur du champ sys_updated_on
. Confirmez que la date correspond à l’heure prévue de l’ajout de la colonne à la table. Si elle a été importée d’une autre instance, elle peut indiquer le moment où la colonne a été créée. Le mécanisme CDC (mises à jour incrémentielles) du connecteur peut ne pas remarquer que l’enregistrement daté dans le passé a été ajouté. Dans ce cas, déclenchez un rechargement de la table sys_dictionary
.