Mettre à jour la configuration de la connexion

La mise à jour de la configuration de la connexion est une étape qui peut être appelée directement après la mise en pause du connecteur. Cette étape permet à l’utilisateur de mettre à jour les propriétés nécessaires à l’établissement d’une connexion avec le système source pour commencer à ingérer des données dans Snowflake. En cas d’écrasement avec une logique personnalisée, cette procédure doit être remplacée pour spécifier un gestionnaire (handler) Java personnalisé.

Pour lancer cette procédure, l’utilisateur doit avoir le rôle d’application ADMIN.

L’étape de configuration de la connexion se compose en interne de plusieurs phases. Certaines d’entre elles sont entièrement personnalisables et, par défaut, n’ont pas d’impact. Les phases sont les suivantes :

  1. Validation du statut

  2. Validation des entrées

  3. Appel d’ébauche

  4. Validation de l’ébauche de connexion

  5. Mise à jour de la configuration

  6. Rappel interne

  7. Validation de la connexion

  8. Mise à jour du statut

Exigences

La configuration de la connexion nécessite au moins l’exécution des fichiers SQL suivants lors de l’installation de la Native App :

  • core.sql

  • configuration/app_config.sql

  • configuration/connection_configuration.sql

  • configuration/update_connection_configuration.sql

Dans le cas de cette fonction, il y a une exigence supplémentaire qui dépend de l’utilisateur SDK :

  • Mise en œuvre personnalisée des procédures PUBLIC.TEST_DRAFT_CONNECTION() et PUBLIC.TEST_CONNECTION()

Validation du statut

Pour effectuer la mise à jour de la configuration de la connexion, le statut interne du connecteur doit être PAUSED.

Cette validation ne peut pas être écrasée par l’utilisation de UpdateConnectionConfigurationHandlerBuilder ni par l’écrasement d’une procédure stockée. Toutefois, il est possible d’implémenter un gestionnaire (handler) personnalisé, qui n’aura pas ce type de validation.

Validation des entrées

L’entrée doit être une variant contenant un mappage des propriétés, mais cela n’est parfois pas suffisant. C’est pourquoi le SDK fournit une procédure stockée interne appelée : PUBLIC.UPDATE_CONNECTION_CONFIG_VALIDATE(config VARIANT). Par défaut, cette procédure renvoie simplement 'response_code': 'OK', mais l’écraser peut mettre à jour la configuration fournie lors de la validation. Cette fonction permet de personnaliser la logique, par exemple en coupant l’entrée, en convertissant les majuscules et les minuscules, etc. Pour renvoyer une configuration transformée de quelque manière que ce soit, la réponse doit contenir une propriété "config" supplémentaire dans la Variant de réponse, cette propriété doit contenir la configuration mise à jour comme Variant. La procédure peut être personnalisée en l’écrasant par le biais de SQL ou en utilisant UpdateConnectionConfigurationHandlerBuilder et en fournissant une implémentation personnalisée de l’interface ConnectionConfigurationInputValidator.

La réponse valide de l’implémentation personnalisée avec transformation ressemble à ceci :

{
    "response_code" : "OK",
    "config": {
        "key1": "value1",
        "key2": "value2"
    }
}
Copy

Mise à jour de la configuration

Une fois les validations transmises avec succès, la configuration sera sauvegardée dans la table interne APP_CONFIG. Le service responsable enregistrera la Variant fournie sous la clé connection_configuration. Pour être mise à jour, cette configuration doit être validée avec succès par le rappel interne du projet et la validation de la connexion au projet ; l’ensemble des propriétés fournies est entièrement laissé à l’appréciation de l’utilisateur.

Rappel de projet interne

Le rappel interne est une autre étape personnalisable. Par défaut, il appelle PUBLIC.DRAFT_CONNECTION_CONFIGURATION_INTERNAL(connection_configuration VARIANT), qui renvoie 'response_code': 'OK'. Cela peut par exemple être utilisé pour modifier d’autres procédures en leur accordant une intégration d’accès externe. Il peut être remplacé par le script sql ou en utilisant un ConnectionConfigurationHandlerBuilder pour fournir une implémentation personnalisée de l’interface ConnectionConfigurationCallback.

Validation de l’ébauche de connexion

Cette étape déclenchera une procédure PUBLIC.TEST_DRAFT_CONNECTION(connection_configuration VARIANT). Cette procédure tente d’interroger le système source pour obtenir les données en utilisant les données du paramètre d’entrée comme configuration de connexion. Cette procédure n’est pas mise en œuvre par défaut et doit être fournie par l’utilisateur de SDK. En outre, une implémentation de l’interface ConnectionValidator peut être fournie à UpdateConnectionConfigurationHandlerBuilder pour personnaliser cette phase. Dans ce cas, il n’est pas nécessaire de mettre en œuvre une procédure stockée. Il est recommandé d’effectuer un contrôle de connectivité minimal dans cette procédure pour s’assurer que les capacités d’accès externe de Snowflake ont été configurées correctement et que le connecteur dispose de tous les privilèges requis pour les utiliser.

Rappel interne

Le rappel interne est une autre étape personnalisable. Par défaut, il appelle PUBLIC.SET_CONNECTION_CONFIGURATION_INTERNAL(connection_configuration VARIANT), qui renvoie 'response_code': 'OK'. Cela peut par exemple être utilisé pour modifier d’autres procédures en leur accordant une intégration d’accès externe. Il peut être remplacé par le script sql ou en utilisant un ConnectionConfigurationHandlerBuilder pour fournir une implémentation personnalisée de l’interface ConnectionConfigurationCallback.

Validation de la connexion

Cette étape déclenchera une procédure PUBLIC.TEST_CONNECTION. Cette procédure a une action jumelle à celle de PUBLIC.TEST_DRAFT_CONNECTION(connection_configuration VARIANT) mais n’a pas de paramètre d’entrée et doit être utilisée pour tester la connexion officielle à l’aide d’une configuration sauvegardée dans la base de données.

Affichage de la configuration

Les utilisateurs ADMIN et VIEWER disposent d’une procédure PUBLIC.GET_CONNECTION_CONFIGURATION() qui renvoie la configuration actuelle de la connexion à partir de la table interne.

Réponse

Réponse aboutie

Si la procédure se termine avec succès, elle renvoie une réponse de la procédure TEST_CONNECTION. Nous vous recommandons d’utiliser le format suivant :

{
  "response_code": "OK"
}
Copy

Erreur de réponse

En cas d’erreur, la réponse suit le format ci-dessous :

{
  "response_code": "<ERROR_CODE>",
  "message": "<error message>"
}
Copy

Les codes d’erreur possibles sont les suivants :

  • INVALID_CONNECTOR_STATUS - Statut du connecteur non valide. Statut attendu : [PAUSED]

  • INTERNAL_ERROR - Quelque chose s’est mal passé en interne, le message doit être descriptif

  • PROCEDURE_NOT_FOUND - La procédure appelée n’existe pas. Dans le cas présent, il s’agit de la procédure TEST_CONNECTION et TEST_DRAFT_CONNECTION

  • UNKNOWN_SQL_ERROR - Cette erreur se produit lorsque quelque chose d’inattendu se produit lors de l’appel de procédures internes

  • INVALID_RESPONSE - Cette erreur se produit lorsque la réponse reçue de la procédure interne ne contient pas de response_code ou qu’une erreur de réponse ne contient pas de message, mais contient un response_code

  • UNKNOWN_ERROR - Cela signifie que quelque chose d’inattendu s’est mal passé - le message de l’exception levée est transmis

  • Codes d’erreur personnalisés reçus de la procédure TEST_DRAFT_CONNECTION() - définis par le développeur du connecteur

  • Codes d’erreur personnalisés reçus de la procédure DRAFT_CONNECTION_CONFIGURATION_INTERNAL() - définis par le développeur du connecteur

  • Codes d’erreur personnalisés reçus de la procédure TEST_CONNECTION() - définis par le développeur du connecteur

  • Codes d’erreur personnalisés reçus de la procédure SET_CONNECTION_CONFIGURATION_INTERNAL() - définis par le développeur du connecteur