Como criar uma referência de recurso

Objetos e procedimentos de banco de dados

Os seguintes objetos de banco de dados são criados quando o arquivo ingestion/resource_management.sql é executado.

PUBLIC.CREATE_RESOURCE(name VARCHAR,resource_id VARIANT,ingestion_configurations VARIANT,id VARCHAR,enabled BOOLEAN,resource_metadata VARIANT)

Procedimento de ponto de entrada disponível para a função ADMIN. Este procedimento invoca a função Java CreateResourceHandler.createResource.

PUBLIC.CREATE_RESOURCE_VALIDATE(resource VARIANT)

Procedimento usado para validação específica do conector do processo de criação. Por padrão, ela retorna 'response_code': 'OK'. É invocado por DefaultCreateResourceValidator. Pode ser sobrescrito em ambos SQL e Java.

PUBLIC.PRE_CREATE_RESOURCE(resource VARIANT)

Procedimento usado para adicionar lógica específica do conector que é invocada antes da criação de um recurso. Por padrão, ela retorna 'response_code': 'OK'. É invocado por DefaultPreCreateResourceCallback. Pode ser sobrescrito em ambos SQL e Java.

PUBLIC.POST_CREATE_RESOURCE(resource_ingestion_definition_id VARCHAR)

Procedimento usado para adicionar lógica específica do conector que é invocada depois que um recurso é criado e agendado. Por padrão, ela retorna 'response_code': 'OK'. É invocado por DefaultPostCreateResourceCallback. Pode ser sobrescrito em ambos SQL e Java.

Manipulador personalizado

O manipulador e seus componentes internos podem ser personalizados usando as seguintes abordagens.

Abordagem de substituição de procedimento

Os seguintes componentes podem ser substituídos usando SQL.

Manipulador

Para fornecer implementação personalizada completa de CreateResourceHandler, o procedimento PUBLIC.CREATE_RESOURCE deve ser substituído. Por exemplo:

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

Procedimentos internos

Os procedimentos internos CREATE_RESOURCE_VALIDATE, PRE_CREATE_RESOURCE e POST_CREATE_RESOURCE também podem ser personalizados através de SQL. Eles também podem invocar outro manipulador 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

Abordagem do construtor

CreateResourceHandler pode ser personalizado usando CreateResourceHandlerBuilder. Este construtor permite que o usuário forneça implementações personalizadas das seguintes interfaces:

  • CreateResourceValidator

  • PreCreateResourceCallback

  • PostCreateResourceCallback

  • ConnectorErrorHelper

Caso uma função não seja fornecida, a implementação padrão fornecida pelo SDK será usada.

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