- 使用 SQL
- 使用 UI 和你自己的代码 (Public Beta)
SQL 用户自定义函数
CREATE FUNCTION 语句,基于 lambda 表达式创建 SQL UDF。
在此示例中,我们将创建一个简单的可执行用户自定义函数 isBusinessHours。
该函数会检查某个时间戳是否处于正常营业时间内;如果是则返回 true,否则返回 false。
- 登录 Cloud Console 并打开 SQL 控制台
- 编写以下 SQL 查询以创建
isBusinessHours函数:
- 运行以下内容,测试你刚创建的 UDF:
- 您可以使用
DROP FUNCTION命令删除刚刚创建的 UDF:
- 会话级设置 (通过
SET语句设置) 不会传递到 UDF 的执行上下文中 - 用户 profile 中的设置不会被 UDFs 继承
- 查询级设置在 UDF 执行期间不生效
通过 UI 创建的用户自定义函数
isBusinessHours,用于检查某个时间戳是否落在正常工作时间内。
此前我们是通过 SQL 创建它的,这次则改用 Python 创建,并通过 UI 进行配置。
创建 Python 文件
在本地新建一个main.py 文件:requirements.txt 文件,并在其中列出这些依赖项。例如:ClickHouse Cloud 会在你下一步通过 UI 上传的 zip 文件中查找
main.py。
如果将该文件命名为其他名称,就会报错。打包依赖项和本地文件
要包含依赖包以及其他本地文件 (例如 wheel 文件、配置文件或数据文件) ,请将它们放在与您的main.py 和 requirements.txt 相同的目录中。创建 ZIP 归档时,请包含所有文件:os.path.dirname(os.path.abspath(__file__)) 引用本地打包路径的基目录。它会返回 ZIP 归档中 main.py 所在目录的绝对路径,以便你访问其他一并打包的文件:- 访问随 UDF 一起打包的配置文件
- 为自定义依赖加载 wheel 包
- 引用其他脚本或数据文件
通过 UI 创建 UDF
- 在 Cloud 控制台主页上,点击左下角菜单中的组织名称。
- 从菜单中选择用户自定义函数。
- 在用户自定义函数页面中,点击设置 UDF。屏幕右侧会打开一个配置面板。
- 输入函数名称。本示例使用
isBusinessHours。 - 选择函数类型,可选 Executable pool 或 Executable:
- Executable pool:系统会维护一个持久进程池,并从池中取出进程来处理读取请求。
- Executable:脚本会在每次查询时运行。
- 本示例使用默认设置。有关完整的配置参数列表,请参见可执行用户自定义函数。
- 点击浏览文件,上传在本教程开头创建的
.zip文件。 - 添加一个新参数。本示例中,添加一个类型为
DateTime的参数timestamp。 - 选择返回类型。本示例中,选择
Bool。 - 点击创建 UDF。此时会显示一个对话框,展示当前构建状态。
- 如果出现任何问题,状态将变为错误。
- 否则,状态会从构建中变为预配中。你的服务必须处于唤醒状态才能完成预配。如果服务处于空闲状态,请在服务名称旁的 UDF 详细信息 面板中点击唤醒服务。
- 完成后,状态将变为已部署。
创建新版本
- 在 Cloud Console 首页,点击左下角菜单中的组织名称。
- 在菜单中选择 用户自定义函数。
- 在
isBusinessHoursUDF 的 操作 一栏中点击三点图标,然后点击 创建新版本 - 上传包含修改后代码的 ZIP 压缩包,或修改设置,然后点击 创建新版本