Mettre à jour la référence des ressources

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

Les objets de base de données suivants sont créés lorsque le fichier ingestion/resource_management.sql est exécuté.

PUBLIC.UPDATE_RESOURCE(resource_ingestion_definition_id VARCHAR, ingestion_configurations VARIANT)

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

PUBLIC.UPDATE_RESOURCE_VALIDATE(resource_ingestion_definition_id VARCHAR, ingestion_configurations VARIANT)

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

PUBLIC.PRE_UPDATE_RESOURCE(resource_ingestion_definition_id VARCHAR, ingestion_configurations VARIANT)

Procédure utilisée pour ajouter une logique spécifique au connecteur qui est invoquée avant la mise à jour d’une ressource. Par défaut, elle renvoie 'response_code': 'OK'. Elle est appelée par DefaultPreUpdateResourceCallback. Peut être écrasée à la fois en SQL et en Java.

PUBLIC.POST_UPDATE_RESOURCE(resource_ingestion_definition_id VARCHAR, ingestion_configurations VARIANT)

Procédure utilisée pour ajouter une logique spécifique au connecteur qui est appelée après la mise à jour d’une ressource. Par défaut, elle renvoie 'response_code': 'OK'. Elle est appelée par DefaultPostUpdateResourceCallback. 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 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 UpdateResourceHandler, la procédure PUBLIC.UPDATE_RESOURCE doit être remplacée. Par exemple :

CREATE OR REPLACE PROCEDURE PUBLIC.UPDATE_RESOURCE(resource_ingestion_definition_id VARCHAR, ingestion_configurations VARIANT)
  RETURNS VARIANT
  LANGUAGE JAVA
  RUNTIME_VERSION = '11'
  PACKAGES = ('com.snowflake:snowpark:1.11.0')
  IMPORTS = ('/connectors-native-sdk.jar')
  HANDLER = 'com.custom.handler.CustomUpdateResourceHandler.updateResource';

GRANT USAGE ON PROCEDURE PUBLIC.UPDATE_RESOURCE(VARCHAR, VARIANT) TO APPLICATION ROLE ADMIN;
Copy

Procédures internes

Les procédures internes UPDATE_RESOURCE_VALIDATE, PRE_UPDATE_RESOURCE et POST_UPDATE_RESOURCE peuvent également être personnalisées par le biais de SQL. Ces procédures peuvent aussi appeler d’autres gestionnaires (handlers) Java :

CREATE OR REPLACE PROCEDURE PUBLIC.UPDATE_RESOURCE_VALIDATE(resource_ingestion_definition_id VARCHAR, ingestion_configurations 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.UPDATE_RESOURCE_VALIDATE(resource_ingestion_definition_id VARCHAR, ingestion_configurations VARIANT)
  RETURNS VARIANT
  LANGUAGE JAVA
  RUNTIME_VERSION = '11'
  PACKAGES = ('com.snowflake:snowpark:1.11.0')
  IMPORTS = ('/connectors-native-sdk.jar')
  HANDLER = 'com.custom.handler.CustomHandler.updateResourceValidate';
Copy

L’approche du constructeur

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

  • UpdateResourceValidator

  • PreUpdateResourceCallback

  • PostUpdateResourceCallback

  • ConnectorErrorHelper

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

class CustomPreUpdateResourceCallback implements PreUpdateResourceCallback {
  @Override
  public ConnectorResponse execute(String resourceIngestionDefinitionId, Variant updatedIngestionConfigurations) {
    // CUSTOM LOGIC
    return ConnectorResponse.success();
  }
}

class CustomHandler {

  // Path to this method needs to be specified in the PUBLIC.UPDATE_RESOURCE procedure using SQL
  public static Variant updateResource(Session session, String resourceIngestionDefinitionId, Variant updatedIngestionConfigurations) {
    //Using builder
    var handler = UpdateResourceHandlerBuilder.builder(session)
      .withPreUpdateResourceCallback(new CustomPreUpdateResourceCallback())
      .build();
    return handler.updateResource(resourceIngestionDefinitionId).toVariant();
  }
}
Copy