概述
GreptimeDB 支持在数据库内运行 Python 脚本,如果业务逻辑太复杂,无法通过 SQL 表达,则可以使用 Python。Python 目前在数据科学和人工智能领域被广泛使用,为了避免花费大量的时间和精力来传输和转换数据,我们提供了在数据库中执行 Python 脚本的能力。
我们认为 GreptimeDB 中的 Python 脚本是传统 RDMS 中存储过程的完美替代品,同时用户也可以创建 SQL UDFs(用户定义的函数)。
所有的例子都可以在 python-coprocessor-examples 中找到。
注意事项
Python 脚本目前正处于实验阶段,API 可能会发生一些变化。
用户可以下载支持 PyO3 的 pre-built binaries,其文件名后缀为 pyo3
。也可以通过下载没有 pyo3
后缀的 binary 文件直接使用 RustPython,它不需要额外的设置。
如果有库的链接问题,那么需要检查是否设置了正确的 Python 共享库,这可能会有点难度。一般来说,只需要安装 python-dev
包(在大多数基于 Debian 的系统 上)。然而,如果用户使用 Homebrew 在 macOS 上安装 Python,则必须创建一个适当的链接到 Library/Frameworks/Python.framework
。
推荐利用 Conda
来管理 Python 环境。首先,用下载的 binary 文件所要求的相同版本的 Python 创建一个 Python 环境。或者,可以使用一个 docker 容器,在其中执行 greptime
binary。
另一个可行方案,但并非推荐方案:手动安装所需的 Python 版本,并将 LD_LIBRARY_PATH
环境变量设置为包含 libpython<VERSION>.so
文件的目录。<VERSION>
的版本号根据所使用的 Python 的版本而不同。
两个 Python 脚本的后端:
- RustPython 解释器:无需安装任何 Python 库就可以支持,但它没有 CPython 后端那么快。名称中没有
pyo3
的 Release Binary 使用 RustPython Interpreter。虽然仍然可以在 RustPython 解释器中使用 Python 语法,但不能使用任何第三方的库。 - CPython 解释器:这是最常用的 Python 版本。它允许使用各种第三方库,但需要安装正确的 Python 共享库。任何名称中带有
pyo3
的 Release Binary 都使用 CPython Interpreter。