更新仓库

仓库更新是可在 暂停连接器 步骤后直接调用的步骤。此步骤允许用户更新在 Connector Configuration 期间设置的仓库,用于运行 SDK 控制的任务。使用自定义逻辑覆盖时,需要替换此过程,以指定自定义 Java 处理程序。

要调用此过程,用户需要已获得 ADMIN 应用程序角色。

仓库更新步骤在内部由几个阶段组成。其中一些是完全可自定义的,默认情况下,不执行任何操作。这些阶段如下所示:

  1. 状态验证

  2. 输入验证

  3. 内部回调

  4. SDK 回调

  5. 配置更新

要求

在原生应用程序安装过程中,仓库配置至少需要执行以下 sql 文件:

  • core.sql

  • configuration/app_config.sql

  • configuration/connector_configuration.sql

  • configuration/update_warehouse.sql

状态验证

要执行仓库更新,连接器的内部状态必须为 PAUSED

不能通过使用 UpdateWarehouseHandlerBuilder 或覆盖存储过程来覆盖此验证。但是,也可以实现一个自定义处理程序,它不会进行这种验证。

输入验证

输入必须是包含新仓库的 String。之后使用 UpdateWarehouseInputValidator 的实现对所提供的仓库进行验证。默认情况下,将执行以下验证,如果不满足所需的条件,则每个验证都会引发异常:

  1. 验证提供的仓库是否为有效的 Snowflake 标识符。

  2. 验证新仓库是否与已配置的仓库不同。

  3. 验证应用程序实例是否可以访问新仓库(通过使用 SHOW WAREHOUSES 询问)。

只能通过使用 UpdateWarehouseHandlerBuilder 并构建新的自定义处理程序实例来自定义此输入验证步骤。

内部回调

内部回调也是一个可自定义的步骤。默认情况下,它会调用 PUBLIC.UPDATE_WAREHOUSE_INTERNAL 过程,其默认实现会返回 'response_code': 'OK'。此步骤可用于为仓库更新过程提供自定义逻辑,例如,更改应用程序开发者创建的任务。可以通过 sql 脚本或使用 UpdateWarehouseHandlerBuilder 提供 UpdateWarehouseCallback 接口的自定义实现来将回调覆盖。

SDK 回调

SDK 回调与内部回调阶段类似。其目的是更新 SDK 控制的组件,例如,由任务反应器创建的任务。

不能通过使用 UpdateWarehouseHandlerBuilder 或覆盖存储过程来覆盖此验证。可以实现一个自定义处理程序,它不会进行这种验证,但是强烈建议不要这样做。

配置更新

成功通过验证和回调后,新仓库将保存到内部 APP_CONFIG 表中。负责此阶段的服务将提供的仓库保存在 connector_configuration 键下,替换之前配置的值。

查看配置

ADMINVIEWER 应用程序角色可以使用 PUBLIC.CONNECTOR_CONFIGURATION 视图,该视图从内部 APP_CONFIG 表返回当前配置。

响应

成功响应

如果该过程成功完成,它将返回包含 OK 响应代码的响应:

{
  "response_code": "OK"
}
Copy

错误响应

如果发生错误,响应格式如下:

{
  "response_code": "<ERROR_CODE>",
  "message": "<error message>"
}
Copy

可能的错误代码包括:

  • INVALID_CONNECTOR_STATUS – 连接器状态无效。预期状态:[PAUSED]

  • INTERNAL_ERROR – 内部出现问题,消息应具有描述性

  • PROCEDURE_NOT_FOUND – 调用的过程不存在

  • UNKNOWN_SQL_ERROR – 如果调用内部过程时发生意外情况,则会出现此错误

  • INVALID_RESPONSE – 如果从内部过程接收的响应不包含 response_code 或错误响应不包含 message,但包含 response_code,则会发生此错误

  • UNKNOWN_ERROR – 这表示出现了意外错误(转发引发异常的消息)

  • EMPTY_IDENTIFIER – 提供的标识符是 NULL 值或空字符串

  • INVALID_IDENTIFIER – 提供的仓库标识符无效

  • WAREHOUSE_ALREADY_USED – 应用程序已使用提供的仓库

  • INACCESSIBLE_WAREHOUSE – 应用程序实例无法访问提供的仓库

  • UPDATE_WAREHOUSE_INTERNAL 过程接收的自定义错误代码 – 由连接器开发者定义

语言: 中文