接続構成を更新する¶
接続構成の更新は、 コネクタを一時停止 した後に直接呼び出すことができるステップです。このステップでは、ユーザーはソースシステムとの接続を確立してSnowflakeへのデータの取り込みを開始するために必要なプロパティを更新できます。カスタムロジックで上書きする場合は、このプロシージャを置き換えて、カスタムJavaハンドラーを指定する必要があります。
このプロシージャを呼び出すには、ユーザーに ADMIN
アプリケーションロールが割り当てられている必要があります。
接続構成ステップは、内部的にいくつかのフェーズで構成されています。一部は完全にカスタマイズ可能で、デフォルトでは何も実行されません。フェーズは次のとおりです。
ステータスの検証
入力の検証
ドラフトコールバック
ドラフト接続の検証
設定の更新
内部コールバック
接続の検証
ステータスの更新
要件¶
接続構成では、Native Appのインストール中に少なくとも次のSQLファイルを実行する必要があります。
core.sql
configuration/app_config.sql
configuration/connection_configuration.sql
configuration/update_connection_configuration.sql
この機能の場合、 SDK ユーザーに応じて追加の要件があります。
PUBLIC.TEST_DRAFT_CONNECTION()
およびPUBLIC.TEST_CONNECTION()
プロシージャのカスタム実装
ステータスの検証¶
接続構成の更新を実行するには、コネクタの内部ステータスが PAUSED
である必要があります。
この検証は、 UpdateConnectionConfigurationHandlerBuilder
を使用しても、ストアドプロシージャを上書きしても上書きできません。ただし、この種の検証を実行しないカスタムハンドラーを実装することはできます。
入力の検証¶
入力は、プロパティのマップを含む variant
である必要がありますが、それだけでは不十分な場合もあります。そのため、 SDK は、 PUBLIC.UPDATE_CONNECTION_CONFIG_VALIDATE(config VARIANT)
という内部ストアドプロシージャを提供しています。デフォルトでは、このプロシージャは 'response_code': 'OK'
を返すだけですが、上書きすると検証中に提供された構成を更新できます。この機能により、入力のトリミング、大文字/小文字への変換などのカスタムロジックが可能になります。何らかの方法で変換された構成を返すには、応答 Variant
に追加の "config"
プロパティを含める必要があり、このプロパティには更新された構成を Variant
として含める必要があります。このプロシージャは、 SQL を使用して上書きするか、 UpdateConnectionConfigurationHandlerBuilder
を使用して、 ConnectionConfigurationInputValidator
インターフェイスのカスタム実装を提供することでカスタマイズできます。
変換を使用したカスタム実装からの有効な応答は次のようになります。
{
"response_code" : "OK",
"config": {
"key1": "value1",
"key2": "value2"
}
}
設定の更新¶
検証が正常に完了すると、構成は内部の APP_CONFIG
テーブルに保存されます。これを担当するサービスは、提供された Variant
を connection_configuration
キーの下に保存します。この構成は、内部ドラフトコールバックとドラフト接続検証によって正常に検証および更新される必要があり、提供されるプロパティのセットは完全にユーザー次第です。
内部ドラフトコールバック¶
内部コールバックは、もう1つのカスタマイズ可能なステップです。デフォルトでは、 PUBLIC.DRAFT_CONNECTION_CONFIGURATION_INTERNAL(connection_configuration VARIANT)
を呼び出し、 'response_code': 'OK'
を返します。たとえば、外部アクセス統合を許可することで、他のプロシージャを変更するために使用できます。SQLスクリプトを通じて上書きすることも、 ConnectionConfigurationHandlerBuilder
を使用して ConnectionConfigurationCallback
インターフェイスのカスタム実装を提供することもできます。
ドラフト接続の検証¶
このステップは PUBLIC.TEST_DRAFT_CONNECTION(connection_configuration VARIANT)
プロシージャをトリガーします。このプロシージャは、入力パラメーターからのデータを接続構成として使用して、ソースシステムにデータをクエリしようとします。このプロシージャはデフォルトでは実装されていないため、 SDK ユーザーが提供する必要があります。さらに、このフェーズをカスタマイズするために、 ConnectionValidator
インターフェイス実装を UpdateConnectionConfigurationHandlerBuilder
に提供することもできます。この場合、ストアドプロシージャを実装する必要はありません。このプロシージャでは、最小限の接続チェックのみを実行して、Snowflakeの外部アクセス機能が正しく構成され、コネクタにそれらの機能を使用するために必要なすべての権限があることを確認することをお勧めします。
内部コールバック¶
内部コールバックは、もう1つのカスタマイズ可能なステップです。デフォルトでは、 PUBLIC.SET_CONNECTION_CONFIGURATION_INTERNAL(connection_configuration VARIANT)
を呼び出し、 'response_code': 'OK'
を返します。たとえば、外部アクセス統合を許可することで、他のプロシージャを変更するために使用できます。SQLスクリプトを通じて上書きすることも、 ConnectionConfigurationHandlerBuilder
を使用して ConnectionConfigurationCallback
インターフェイスのカスタム実装を提供することもできます。
接続の検証¶
このステップは PUBLIC.TEST_CONNECTION
プロシージャをトリガーします。このプロシージャは、 PUBLIC.TEST_DRAFT_CONNECTION(connection_configuration VARIANT)
と連動しますが、入力パラメーターがなく、データベースに保存された構成を使用して正式な接続をテストするために使用する必要があります。
構成の表示¶
ADMIN
および VIEWER
のユーザーは、内部テーブルから現在の接続構成を返す PUBLIC.GET_CONNECTION_CONFIGURATION()
プロシージャを使用できます。
応答¶
正常な応答¶
プロシージャが正常に終了すると、 TEST_CONNECTION
プロシージャからの応答が返されます。次の形式を使用することをお勧めします。
{
"response_code": "OK"
}
エラーの応答¶
エラーが発生した場合、応答は次の形式になります。
{
"response_code": "<ERROR_CODE>",
"message": "<error message>"
}
考えられるエラーコードは次のとおりです。
INVALID_CONNECTOR_STATUS
- コネクタのステータスが無効です。期待されるステータス:[PAUSED]
INTERNAL_ERROR
- 内部で問題が発生しました。メッセージには説明が必要ですPROCEDURE_NOT_FOUND
- 呼び出されたプロシージャが存在しません。この場合、主にTEST_CONNECTION
およびTEST_DRAFT_CONNECTION
プロシージャに関するものですUNKNOWN_SQL_ERROR
- このエラーは、内部プロシージャを呼び出すときに予期しない事態が発生したときに発生しますINVALID_RESPONSE
- このエラーは、内部プロシージャから受信した応答にresponse_code
が含まれていない場合、またはエラーの応答にmessage
が含まれていないが、response_code
が含まれている場合に発生します。UNKNOWN_ERROR
- 予期しない問題が発生したことを意味します - スローされた例外のメッセージが転送されますTEST_DRAFT_CONNECTION()
プロシージャから受信したカスタムエラーコード - コネクタ開発者によって定義されますDRAFT_CONNECTION_CONFIGURATION_INTERNAL()
プロシージャから受信したカスタムエラーコード - コネクタ開発者によって定義されますTEST_CONNECTION()
プロシージャから受信したカスタムエラーコード - コネクタ開発者によって定義されますSET_CONNECTION_CONFIGURATION_INTERNAL()
プロシージャから受信したカスタムエラーコード - コネクタ開発者によって定義されます