ByteHouse 支持创建用户自定义函数(User-Defined Function,UDF),满足业务场景下用户自定义计算逻辑的需求。本文介绍了如何创建、编辑和删除 UDF。
UDF(User-Defined Function,用户自定义函数)是指由用户创建的自定义函数,通常在数据库系统或编程语言环境中使用,以满足特定的计算需求。您可通过 UDF 扩展内置功能,通过使用特定的编程语言(如 SQL、Python、Java 等)编写自定义逻辑,从而实现更加复杂或个性化的数据处理。
当前 ByteHosue 支持可执行用户定义函数(Executable UDF),支持调用 UDF 时调用一段本机的脚本,当前版本支持 Python 脚本。
登录 ByteHouse 企业版控制台,单击顶部数据管理,在左上角下拉选择已创建成功的集群,单击➕新建 按钮,选择创建 UDF。
填写 UDF 基本信息。
参数 | 配置说明 |
---|---|
集群 | 选择已创建的集群,后续 UDF 会创建在此集群中。 |
UDF 类型 | 当前仅支持 Executable 类型。 |
名称 | 自定义 UDF 名称。命名规则如下:
|
描述 | 自定义 UDF 描述信息。 |
填写 UDF 配置信息。
参数 | 配置说明 |
---|---|
输入值 | 配置 UDF 的输入(Input)参数名和类型。如需添加多个参数,可单击添加多行按钮,继续添加。 |
结果值 | 配置 UDF 的输出(Output)参数名和参数类型。 |
数据格式 | 当前仅支持 TabSeparated 格式。 |
上传文件 | 上传 UDF 脚本文件。当前仅支持 .py 格式,单个文件大小不超过 10M。 |
Python 模板内容及说明如下:
# Format为TabSeperated情况下,输入参数在标准输入流中以Tab分割 # 每行为一组输入参数,需要在标准输出流中产生对应的一行输出 def concat_three_elem(): import sys for line in sys.stdin: # 去除行末尾的换行符,并按Tab分割 parts = line.strip().split(' ') # 确保有三个参数 if len(parts) == 3: # 拼接三个参数 output = ''.join(parts) print(output) else: print("每行应包含三个参数,用Tab分隔。") if __name__ == "__main__": concat_three_elem()
代码 | 说明 |
---|---|
for line in sys.stdin | 逐行处理数据。sys.stdin 为标准输入流,对应的是输入值。 |
parts = line.strip().split(' ') | 移除每行末尾的换行符,并按 Tab 键分割字符串,将一行输入拆分为多个参数。 |
if len(parts) == 3 | 验证输入参数数量是否为 3 个。 |
output = ''.join(parts) | 输出结果为拼接参数列表为字符串。 |
print(output) | 自动被抓取为返回值,每行只能 print 一次,否则将会报错。 |
单击立即创建。系统提示创建成功,并跳转至 UDF 详情页。
重启集群。UDF 创建后,需要重启集群才能生效,操作详情请参考集群重启。
ByteHouse 支持编辑已创建的 UDF。
您可参考以下文档,为用户授予 UDF 相关权限: