Monetdbe Python UDF
Monetdbe Python UDF
鉴于 monetdbe
是一个 Python 包,我很乐观地认为 Python 用户定义的函数是可能的,但我没能找到一个例子.我试过这个:
drop function every_other_letter;
create function every_other_letter(s string)
returns string
language python {
letters = "".join(s[::2])
return letters
};
select every_other_letter('foobarbaz');
我收到这个错误:
ParseException:SQLparser:42000!Internal error while compiling statement: TypeException:user.p2_1[4]:'pyapi3.eval' library error in: Embedded Python 3 has not been enabled. Start server with --set embedded_py=3
有没有办法在嵌入式版本中设置这些标志?
LANGUAGE PYTHON
UDF 是 MonetDB 服务器安装中的一项很好的开发功能,但此功能需要加载额外的 Python 模块。并且目前无法配置 monetdbe
以加载所需的 python 模块。
然而,假设您对一些生产设置有性能要求,而 monetdbe 中的 out-of-the-box SQL 工具集不满足,那么实现一个用 [=35 编写的自定义 UDF 扩展更有意义=]++。在常规的 MonetDB 服务器安装中,数据库服务器 mserver5
可以使用 --loadmodule=<module>
命令选项加载任意扩展模块。但是目前还没有等价物monetdbe_option
。
您可以考虑在 monetdbe-python 的 github 存储库中为此添加功能请求。
然而,似乎存在一个有效的未记录的解决方法,用于将 UDF 扩展添加到 monetdbe
。在初始化期间,monetdbe
尝试加载一组硬编码模块。其中之一是名为 "udf"
的模块。您可以创建自己的此模块实现并将其加载到 monetdbe
.
创建本机 UDF 扩展不在本问答的范围内,但是有一个不错的 up-to-date 教程用于为 MonetDB here 编写 UDF 扩展。按照该教程中描述的步骤,您最终会得到一个 SQL 函数 revstr
,它具有用户定义的本机实现。以下 Python 脚本演示了它的用法:
from monetdbe import connect
with connect(autocommit=True) as con:
cur = cur.execute("select revstr('abcde')")
result = cur.fetchall()
print(result)
确保包含您的 UDF 扩展的库位于动态链接器的搜索路径中:
LD_LIBRARY_PATH=<path to directory containing lib_udf> python test.py
鉴于 monetdbe
是一个 Python 包,我很乐观地认为 Python 用户定义的函数是可能的,但我没能找到一个例子.我试过这个:
drop function every_other_letter;
create function every_other_letter(s string)
returns string
language python {
letters = "".join(s[::2])
return letters
};
select every_other_letter('foobarbaz');
我收到这个错误:
ParseException:SQLparser:42000!Internal error while compiling statement: TypeException:user.p2_1[4]:'pyapi3.eval' library error in: Embedded Python 3 has not been enabled. Start server with --set embedded_py=3
有没有办法在嵌入式版本中设置这些标志?
LANGUAGE PYTHON
UDF 是 MonetDB 服务器安装中的一项很好的开发功能,但此功能需要加载额外的 Python 模块。并且目前无法配置 monetdbe
以加载所需的 python 模块。
然而,假设您对一些生产设置有性能要求,而 monetdbe 中的 out-of-the-box SQL 工具集不满足,那么实现一个用 [=35 编写的自定义 UDF 扩展更有意义=]++。在常规的 MonetDB 服务器安装中,数据库服务器 mserver5
可以使用 --loadmodule=<module>
命令选项加载任意扩展模块。但是目前还没有等价物monetdbe_option
。
您可以考虑在 monetdbe-python 的 github 存储库中为此添加功能请求。
然而,似乎存在一个有效的未记录的解决方法,用于将 UDF 扩展添加到 monetdbe
。在初始化期间,monetdbe
尝试加载一组硬编码模块。其中之一是名为 "udf"
的模块。您可以创建自己的此模块实现并将其加载到 monetdbe
.
创建本机 UDF 扩展不在本问答的范围内,但是有一个不错的 up-to-date 教程用于为 MonetDB here 编写 UDF 扩展。按照该教程中描述的步骤,您最终会得到一个 SQL 函数 revstr
,它具有用户定义的本机实现。以下 Python 脚本演示了它的用法:
from monetdbe import connect
with connect(autocommit=True) as con:
cur = cur.execute("select revstr('abcde')")
result = cur.fetchall()
print(result)
确保包含您的 UDF 扩展的库位于动态链接器的搜索路径中:
LD_LIBRARY_PATH=<path to directory containing lib_udf> python test.py