ClickHouse UDF编写示例

ClickHouse UDF编写

在ClickHouse 22版本以后提供了UDF的功能,能够通过编写python,go 等脚本的方式实现自己的业务逻辑,除了提供类似SqlServer、MySQL CREATE FUNCTION 的自定义函数之外,还有一个用户自定义函数(UDF),与其说是“用户自定义函数”,为了避免混淆,称之为”用户自定义外部函数“更为准确。官方对此功能的解释:

ClickHouse can call any external executable program or script to process data.
译文:ClickHouse可以调用任何外部可执行程序或脚本来处理数据。
可以调用外部程序或脚本来处理数据,这对于数据建模、数据分析等等来说,无疑是杀手锏的存在。

在之前的版本中如果想增加UDF功能,只能通过修改源码的方式,下面介绍下UDF的写法

1. SQL方式的UDF

计算公式
如,我们想要实现下面的公式

result=number*(k+b)

编写语句

#创建函数
 CREATE FUNCTION num_formula AS (x, k, b) -> k*(x+b);
# 执行函数查看数据
SELECT number,num_formula(number, 2, 1) FROM numbers(3);

在这里插入图片描述
可以看到ch能够按照UDF的函数自己解析

编写python脚本

环境准备

需要安装python3的环境,这步自行安装

config.xml中添加内容

<user_defined_executable_functions_config>*_function.xml</user_defined_executable_functions_config>

添加函数的xml文件

在 /etc/clickhouse-server 下添加 getsum_function.xml

<functions>
    <function>
        <type>executable_pool</type>
        <name>getsum_function</name>
        <return_type>UInt64</return_type>
        <return_name>result_name</return_name>
        <argument>
            <type>UInt64</type>
            <name>argument_1</name>
        </argument>
        <argument>
            <type>UInt64</type>
            <name>argument_2</name>
        </argument>
        <format>JSONEachRow</format>
        <command>getsum.py</command>
    </function>

python执行文件

c l i c k h o u s e P a t h / u s e r s c r i p t s ( clickhousePath/user_scripts ( clickhousePath/userscripts(clickhousePath是ch的安装目录)中添加python文件

cat getsum.py

#!/usr/bin/python3

import sys
import json

def _sum(arr,n):
     
    # 使用内置的 sum 函数计算
    return(sum(arr))
    
if __name__ == '__main__':
    for line in sys.stdin:
        dict = json.loads(line)
        arr = []
        for v in dict.values():
            arr.append(v)
        n = len(arr)
        ans = _sum(arr,n)
        result={'result_name': ans}
        print(json.dumps(result), end='\n')
        sys.stdout.flush()

权限

需要确认

    1. /etc/clickhouse-server 目录为755
    1. python文件需要执行权限
    1. /etc/clickhouse-server 下的xml文件所有者为clickhouse ,方便起见,直接对 /etc/clickhouse-server 级联设置所有者即可

执行函数

在这里插入图片描述

先写到这,之后有空再补充

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值