如果有人仍然对此问题感兴趣。
有两种调试 MonetDB 的 Python/UDF 的新方法。
1) 使用 python 客户端 pymonetdb (https://github.com/gijzelaerr/pymonetdb)。
你可以安装它 throw pip
pip install numpy
要使用它,请考虑以下设置,其中包含一个包含整数的表和一个计算给定列的平均绝对偏差的 UDF。
CREATE TABLE integers(i INTEGER);
INSERT INTO integers VALUES (1), (3), (6), (8), (10);
CREATE OR REPLACE FUNCTION mean_deviation(column INTEGER)
RETURNS DOUBLE LANGUAGE PYTHON {
mean = 0.0
for i in range (0, len(column)):
mean += column[I]
mean = mean / len(column)
distance = 0.0
for i in range (0, len(column)):
distance += column[i] - mean
deviation = distance/len(column)
return deviation;
};
要使用终端调试(即 pdb)来调试你的函数,你只需要使用 pymonetdb.connect() 打开一个数据库连接,然后你从连接中获取一个游标对象,并通过游标对象调用 debug( ) 函数,将要检查的 SQL 和要调试的 UDF 名称作为参数发送。
import pymonetdb
conn = pymonetdb.connect(database='demo') #Open Database connection
c = conn.cursor()
sql = 'select mean_deviation(i) from integers;'
c.debug(sql, 'mean_deviation') #Console Debugging
有一个可选的采样步骤,它只传输数据的均匀随机样本,而不是完整的输入数据集。如果您想采样,您只需发送您希望从采样中获得的元素数量(例如,如果您需要 10 个元素的子集,则使用 c.debug(sql, 'mean_deviation', 10))
2) 使用名为 devudf 的 PyCharm 的 POC 插件,您可以在 pycharm 的插件页面中安装它,或者直接进入 JetBrains 页面:https://plugins.jetbrains.com/plugin/12063-devudf。它在主菜单中添加了一个名为“UDF 开发”的选项,允许您直接将 UDF 从数据库导入和导出到 pycharm,并享受 IDE 的调试功能。