Finaliser la référence de configuration

Objets et procédures de la base de données

Les objets de base de données suivants sont créés par le biais du fichier configuration/finalize_configuration.sql.

PUBLIC.FINALIZE_CONNECTOR_CONFIGURATION (CUSTOM_CONFIGURATION VARIANT)

Procédure de point d’entrée disponible pour le rôle ADMIN. Cette procédure appelle la fonction Java FinalizeConnectorHandler.finalizeConnectorConfiguration.

PUBLIC.FINALIZE_CONNECTOR_CONFIGURATION_VALIDATE (CUSTOM_CONFIGURATION VARIANT)

Procédure utilisée pour la validation spécifique au connecteur de la configuration personnalisée. Par défaut, elle renvoie 'response_code': 'OK'. Elle est appelée par DefaultFinalizeConnectorValidator. Peut être écrasée à la fois en SQL et en Java.

PUBLIC.VALIDATE_SOURCE (CUSTOM_CONFIGURATION VARIANT)

Procédure vérifiant la connexion au système source avec une configuration supplémentaire spécifique au connecteur. Dans certains cas, il peut s’agir de la même procédure que la procédure TEST_CONNECTION, mais parfois il s’agira d’effectuer des performances de manière plus détaillée. Par défaut, elle renvoie 'response_code': 'OK'. Elle est appelée par InternalSourceValidator.

PUBLIC.FINALIZE_CONNECTOR_CONFIGURATION_INTERNAL (CUSTOM_CONFIGURATION VARIANT)

Procédure utilisée pour effectuer toute configuration personnalisée supplémentaire. Par défaut, elle renvoie 'response_code': 'OK'. Elle est appelée par InternalFinalizeConnectorCallback. Peut être écrasée à la fois en SQL et en Java.

Gestionnaire (handler) personnalisé

Le gestionnaire (handler) et ses éléments internes peuvent être personnalisés selon les deux approches suivantes.

Approche de remplacement de procédure

Les composants suivants peuvent être remplacés à l’aide de SQL.

Gestionnaire (handler)

Pour fournir une implémentation entièrement personnalisée de FinalizeConnectorHandler, la procédure PUBLIC.FINALIZE_CONNECTOR_CONFIGURATION doit être remplacée. Par exemple :

CREATE OR REPLACE PROCEDURE PUBLIC.FINALIZE_CONNECTOR_CONFIGURATION(CUSTOM_CONFIGURATION VARIANT)
RETURNS VARIANT
LANGUAGE JAVA
RUNTIME_VERSION = '11'
PACKAGES = ('com.snowflake:snowpark:1.11.0')
IMPORTS = ('/connectors-native-sdk.jar')
HANDLER = 'com.custom.handler.CustomFinalizeConnectorHandler.finalizeConnectorConfiguration';

GRANT USAGE ON PROCEDURE PUBLIC.CONFIGURE_CONNECTOR(VARIANT) TO APPLICATION ROLE ADMIN;
Copy

Procédures internes

Les procédures internes VALIDATE, INTERNAL et VALIDATE_SOURCE peuvent également être personnalisées par le biais de SQL. Elles peuvent même appeler un autre gestionnaire (handler) Java :

CREATE OR REPLACE PROCEDURE PUBLIC.FINALIZE_CONNECTOR_CONFIGURATION_INTERNAL(config VARIANT)
RETURNS VARIANT
LANGUAGE SQL
EXECUTE AS OWNER
AS
BEGIN
    -- SOME CUSTOM LOGIC BEGIN
    SELECT sysdate();
    -- SOME CUSTOM LOGIC END

    RETURN OBJECT_CONSTRUCT('response_code', 'OK');
END;

CREATE OR REPLACE PROCEDURE PUBLIC.FINALIZE_CONNECTOR_CONFIGURATION_VALIDATE (config VARIANT)
RETURNS VARIANT
LANGUAGE JAVA
RUNTIME_VERSION = '11'
PACKAGES = ('com.snowflake:snowpark:1.11.0')
IMPORTS = ('/connectors-native-sdk.jar')
HANDLER = 'com.custom.handler.CustomFinalizeConnectorConfigurationValidateHandler.validate';
Copy

L’approche du constructeur

FinalizeConnectorHandler peut être personnalisé à l’aide de FinalizeConnectorHandlerBuilder. Ce constructeur permet à l’utilisateur de fournir des implémentations personnalisées des interfaces suivantes :

  • FinalizeConnectorValidator

  • SourceValidator

  • FinalizeConnectorCallback

  • ConnectorErrorHelper

Dans le cas où l’une d’entre elles n’est pas fournie, l’implémentation par défaut fournie par le SDK sera utilisée.

class CustomFinalizeConnectorValidator implements FinalizeConnectorValidator {
    @Override
    public ConnectorResponse validate(Variant config) {
        // CUSTOM LOGIC
        return ConnectorResponse.success();
    }
}

class CustomHandler {

    // Path to this method needs to be specified in the PUBLIC.FINALIZE_CONNECTOR_CONFIGURATION procedure using SQL
    public static Variant finalizeConnector(Session session, Variant configuration) {
            //Using builder
        var handler = FinalizeConnectorHandler.builder(session)
            .withValidator(new CustomFinalizeConnectorValidator())
            .build();
        return handler.finalizeConnector(configuration).toVariant();
    }
}
Copy