前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在ClickHouse中自定义脚本函数

在ClickHouse中自定义脚本函数

作者头像
Nauu
发布2022-03-29 15:49:16
3.9K0
发布2022-03-29 15:49:16
举报

在先前的一篇文章中我曾介绍过,如何在 ClickHouse 中用 SQL 创建 UDF 自定义函数 ,《传送门》在此。

在新版本中,该特性又得到了增强,现在进一步支持执行本地文件脚本或者预先定义的 shell 命令。

接下来让我们快速了解该功能如何使用。

首先,在 config.xml 文件中添加如下配置:

代码语言:javascript
复制
<user_defined_executable_functions_config>*_function.xml</user_defined_executable_functions_config>

该配置用于匹配 Executable UDF 的定义文件。

接着,在 user_files 目录下,创建一个函数定义文件 test_executable_udf.xml :

代码语言:javascript
复制
<functions>
    <function>
        <type>executable</type>
        <name>test_executable_udf</name>
        <return_type>String</return_type>
        <argument>
            <type>UInt64</type>
        </argument>
        <format>TabSeparated</format>
        <command>test_executable_udf.py</command>
    </function>
</functions>

最后,在 user_scripts 目录下,放入需要执行的脚本文件,例如

test_executable_udf.py :

代码语言:javascript
复制
#!/usr/bin/python3

import sys

if __name__ == '__main__':
    for line in sys.stdin:
        print("UDF Value is : " + line, end='')
        sys.stdout.flush()

全部搞定之后,我们就能在 ClickHouse 中调用脚本函数了:

代码语言:javascript
复制
SELECT test_executable_udf(toUInt64(2))

如果想执行 Shell 命令,则只需将 *_function.xml 配置文件中,<command> 内的文件名替换成命令文本,并增加 execute_direct 参数,例如:

代码语言:javascript
复制
<command>
cd/; clickhouse-local --input-format TabSeparated --output-formatTabSeparated --structure
'x UInt64, y UInt64'
"SELECT x + y FROM table"
</command>
<execute_direct>0</execute_direct>

相关的 PR 地址如下:

https://github.com/ClickHouse/ClickHouse/pull/28803

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-02-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ClickHouse的秘密基地 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档