目录
- 一、环境版本
- 二、官方示例
- 三、解决方案
-
- 1.Python脚本运行缺少权限
- [2. 缺少Python3运行环境](#2. 缺少Python3运行环境)
- 四、参考借鉴
一、环境版本
环境 | 版本 |
---|---|
docker clickhouse | 22.3.10.22 |
shell
docker pull clickhouse/clickhouse-server:22.3.10.22
二、官方示例
test_function使用 XML 配置创建。文件test_function.xml(/etc/clickhouse-server/test_function.xml使用默认路径设置)。
xml
<functions>
<function>
<type>executable</type>
<name>test_function_python</name>
<return_type>String</return_type>
<argument>
<type>UInt64</type>
<name>value</name>
</argument>
<format>TabSeparated</format>
<command>test_function.py</command>
</function>
</functions>
user_scripts文件夹内的脚本文件test_function.py(/var/lib/clickhouse/user_scripts/test_function.py使用默认路径设置)。
python
#!/usr/bin/python3
import sys
if __name__ == '__main__':
for line in sys.stdin:
print("Value " + line, end='')
sys.stdout.flush()
询问:
sql
SELECT test_function_python(toUInt64(2));
报错:
shell
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
执行:
sql
SYSTEM RELOAD FUNCTIONS;
SELECT * FROM system.functions WHERE name = 'test_function_python';
发现函数已添加,却依旧运行报错
三、解决方案
1.Python脚本运行缺少权限
shell
chmod a+x /var/lib/clickhouse/user_scripts/test_function.py
2. 缺少Python3运行环境
官方镜像中缺少Python3运行环境,需单独安装
shell
apt update
apt install python3