ClickHouse UDF 官方示例Example报错解决方案

目录

  • 一、环境版本
  • 二、官方示例
  • 三、解决方案
    • 1.Python脚本运行缺少权限
    • 2. 缺少Python3运行环境
  • 四、参考借鉴

一、环境版本

环境 版本
docker clickhouse 22.3.10.22
docker pull clickhouse/clickhouse-server:22.3.10.22

二、官方示例

官网文档

test_function使用 XML 配置创建。文件test_function.xml(/etc/clickhouse-server/test_function.xml使用默认路径设置)。

<functions>
    <function>
        <type>executabletype>
        <name>test_function_pythonname>
        <return_type>Stringreturn_type>
        <argument>
            <type>UInt64type>
            <name>valuename>
        argument>
        <format>TabSeparatedformat>
        <command>test_function.pycommand>
    function>
functions>

user_scripts文件夹内的脚本文件test_function.py(/var/lib/clickhouse/user_scripts/test_function.py使用默认路径设置)。

#!/usr/bin/python3

import sys

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

询问:

SELECT test_function_python(toUInt64(2));

报错:

Code: 75. DB::ErrnoException: Cannot write into pipe , errno: 32, strerror: Broken pipe: While executing TabSeparatedRowOutputFormat: While processing test_function_python(toUInt64(2)). (CANNOT_WRITE_TO_FILE_DESCRIPTOR) (version 22.3.10.22 (official build)) , server ClickHouseNode [uri=http://localhost:8123/default, options={custom_http_params=session_id=DataGrip_3dcf30c1-e0d2-4f93-8c21-7fc99420db96}]@-1444910710

执行:

SYSTEM RELOAD FUNCTIONS;
SELECT * FROM system.functions WHERE name = 'test_function_python';

发现函数已添加,却依旧运行报错

三、解决方案

1.Python脚本运行缺少权限

chmod a+x /var/lib/clickhouse/user_scripts/test_function.py

2. 缺少Python3运行环境

官方镜像中缺少Python3运行环境,需单独安装

apt update
apt install python3

四、参考借鉴

Github Issues

你可能感兴趣的:(ClickHouse,clickhouse)