Créer une référence de ressource

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.CREATE_RESOURCE(name VARCHAR,resource_id VARIANT,ingestion_configurations VARIANT,id VARCHAR,enabled BOOLEAN,resource_metadata VARIANT)

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

PUBLIC.CREATE_RESOURCE_VALIDATE(resource VARIANT)

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

PUBLIC.PRE_CREATE_RESOURCE(resource VARIANT)

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

PUBLIC.POST_CREATE_RESOURCE(resource_ingestion_definition_id VARCHAR)

Procédure utilisée pour ajouter une logique spécifique à un connecteur qui est appelée après la création et la planification d’une ressource. Par défaut, elle renvoie 'response_code': 'OK'. Elle est appelée par DefaultPostCreateResourceCallback. 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 CreateResourceHandler, la procédure PUBLIC.CREATE_RESOURCE doit être remplacée. Par exemple :

CREATE OR REPLACE PROCEDURE PUBLIC.CREATE_RESOURCE(name VARCHAR,resource_id VARIANT,ingestion_configurations VARIANT,id VARCHAR,enabled BOOLEAN,resource_metadata VARIANT)
  RETURNS VARIANT
  LANGUAGE JAVA
  RUNTIME_VERSION = '11'
  PACKAGES = ('com.snowflake:snowpark:1.11.0')
  IMPORTS = ('/connectors-native-sdk.jar')
  HANDLER = 'com.custom.handler.CustomCreateResourceHandler.createResource';

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

Procédures internes

Les procédures internes CREATE_RESOURCE_VALIDATE, PRE_CREATE_RESOURCE et POST_CREATE_RESOURCE peuvent également être personnalisées par le biais de SQL. Elles peuvent aussi appeler un autre gestionnaire (handler) Java :

CREATE OR REPLACE PROCEDURE PUBLIC.CREATE_RESOURCE_VALIDATE(resource 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.CREATE_RESOURCE_VALIDATE(resource 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.createResourceValidate';
Copy

L’approche du constructeur

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

  • CreateResourceValidator

  • PreCreateResourceCallback

  • PostCreateResourceCallback

  • ConnectorErrorHelper

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

class CustomPreCreateResourceCallback implements PreCreateResourceCallback {
  @Override
  public ConnectorResponse execute(String resourceIngestionDefinitionId) {
    // CUSTOM LOGIC
    return ConnectorResponse.success();
  }
}

class CustomHandler {

  // Path to this method needs to be specified in the PUBLIC.CREATE_RESOURCE procedure using SQL
  public static Variant createResource(
      Session session,
      String name,
      Variant resourceId,
      Variant ingestionConfigurations,
      String id,
      boolean enabled,
      Variant resourceMetadata) {
    //Using builder
    var handler = CreateResourceHandlerBuilder.builder(session)
      .withPreCreateResourceCallback(new CustomPreCreateResourceCallback())
      .build();
    return handler.createResource(resourceIngestionDefinitionId).toVariant();
  }
}
Copy