ストアドプロシージャとハンドラーのカスタマイズ¶
Snowflake Native SDK for Connectors はコネクタの一般的な構造を提供しますが、ソースシステムと開発者の実際のニーズに応じて、ある程度のカスタマイズが可能です。そのため、一部の機能には空の基本実装があり、カスタムロジックで上書きできます。さらに、コンポーネントは特定のニーズに応じて有効または無効にできます。詳細については、コンポーネントの選択セクションをご参照ください。
ストアドプロシージャ¶
SDK によって提供されるストアドプロシージャは、次の2つのカテゴリに分けられます。
Javaで実装されたロジックへの高レベルのエントリポイント
小規模の内部プロシージャ
それぞれの担当業務が異なるため、カスタマイズのプロセスも異なります。
高レベルのプロシージャのカスタマイズ¶
高レベルのプロシージャは、Javaで実装された実際のロジックへのエントリポイントとしてのみ使用されます。したがって、基礎となるロジックを変更するには、ストアドプロシージャを再作成するときに、新しいハンドラーへのパスを指定する必要があります。このプロシージャは、 setup.sql
スクリプトにカスタムコードとして追加する必要があります。これには新しいJava実装を提供する必要があります。これは最初から行うことも、以下で説明する SDK builders
で提供されているものを使用することもできます。
CREATE OR REPLACE PROCEDURE PUBLIC.CONFIGURE_CONNECTOR(input VARIANT)
RETURNS VARIANT
LANGUAGE JAVA
RUNTIME_VERSION = '11'
PACKAGES = ('com.snowflake:snowpark:1.11.0')
IMPORTS = ('/jar_with_custom_code.jar')
HANDLER = 'com.custom.handler.CustomHandler.configure';
小規模なプロシージャのカスタマイズ¶
Snowflake Native SDK for Connectors によって提供されるプロシージャの中には、ロジックが非常に少ないものがあり、 SQL のみを使用して簡単に記述できます。これらのプロシージャでは、 SQL のみを使用してデフォルトの実装を置き換えることができます。たとえば、 _VALIDATE
または _INTERNAL
サフィックスを持つ一部のプロシージャは、この方法で再実装できます。これらのプロシージャはすべて、 Builders
を通じてJavaのみのアプローチを使用してカスタマイズすることもできます。このアプローチについては、以下で説明します。プレーン SQL のみを使用していたプロシージャを、代わりにハンドラーを使用するように置き換えることもできます。この場合は、上記の高レベルのストアドプロシージャと同じになります。
CREATE OR REPLACE PROCEDURE PUBLIC.CONFIGURE_CONNECTOR_INTERNAL(config VARIANT)
RETURNS VARIANT
LANGUAGE SQL
EXECUTE AS OWNER
AS
BEGIN
-- input some custom logic here
RETURN OBJECT_CONSTRUCT('response_code', 'OK');
END;
ハンドラー¶
Snowflake Native SDK for Connectors はストアドプロシージャのデフォルトハンドラーを定義します。そのまま使用することも、カスタマイズまたは完全に置き換えることもできます。後者の場合、カスタム実装全体が SDK で定義された標準に従う必要はなく、高レベルの手順をカスタマイズするために上で述べたように、カスタム実装は SQL で指定する必要があります。
ただし、 SDK で定義されたコネクタのフローに従う場合は、フローの一部だけをカスタマイズする方法があります。既存の各ハンドラーは複数の基礎オブジェクトを使用しており、ほとんどの場合、それらは validator
、 callback
、または helper
クラスです。それぞれが何らかのインターフェイスを満たしており、デフォルトの実装をインターフェイスのカスタム実装に置き換えることができます。
ビルダー¶
カスタマイズ中にコネクタ内の SDK 定義フローを保持するために、 builders
と呼ばれるヘルパーオブジェクトが提供されます。各 handler
クラスには独自の builder
バンドルがあります。これらにより、ユーザーは基盤となるJavaオブジェクトのカスタム実装を提供できるようになります。この方法では、開発者はコネクタの内部フローに触れる必要がなくなり、必要な部分のみのカスタマイズに集中できます。 builders
を使用する場合、小さな問題があります。このアプローチでは、開発者がストアドプロシージャで参照される新しいエントリポイントメソッドを指定する必要もあります。
たとえば、 handler
を使用してカスタマイズされた validator
を使用する builder
は次のようになります。
class CustomConnectionConfigurationInputValidator implements ConnectionConfigurationInputValidator {
@Override
public ConnectorResponse validate(Variant config) {
// CUSTOM LOGIC
return ConnectorResponse.success();
}
}
class CustomHandler {
// Path to this method needs to be specified in the PUBLIC.SET_CONNECTION_CONFIGURATION procedure using SQL
public static Variant configureConnection(Session session, Variant configuration) {
//Using builder
var handler = ConnectionConfigurationHandler.builder(session)
.withInputValidator(new CustomConnectionConfigurationInputValidator())
.build();
return handler.connectionConfiguration(configuration).toVariant();
}
}
その場合、 SQL のエントリポイントメソッドを次のように指定する必要があります。
CREATE OR REPLACE PROCEDURE PUBLIC.SET_CONNECTION_CONFIGURATION(input VARIANT)
RETURNS VARIANT
LANGUAGE JAVA
RUNTIME_VERSION = '11'
PACKAGES = ('com.snowflake:snowpark:1.11.0')
IMPORTS = ('/jar_with_custom_code.jar')
HANDLER = 'com.custom.handler.CustomHandler.configureConnection';