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