qPython 功能查询
qPython Functional Queries
我们正在尝试使用 qPython 构建函数查询。用简单的例子来构建 运行 时间的 where 条件。
我们在 KDB 服务器上定义了一个 q 函数,比如
fn:{[c]
t: (select from tbl);
:?[t;c;0b;()];
}
在Python中我们打开一个连接并发送条件
c = [['=', numpy.string_('TradeId'), 123456]]
result = conn.sendSync('fn', c)
当我执行此操作时,在 q 控制台中我看到 = 运算符为“=”。
问题是如何传递运算符
您可以 value
kdb 端的 string/char 将其从 string/char 转换为底层 kdb 运算符。这在您的示例中有效,但您可能需要一些额外的 work/testing 将其推广到您可能发送的所有可能的运算符:
q)tbl:([]TradeId:0 123456 123456 123456;col2:1 2 3 4)
q)fn:{[c] c:.[c;(::;0);value];t:(select from tbl); :?[t;c;0b;()];}
q)0(`fn;enlist("=";`TradeId;123456))
TradeId col2
------------
123456 2
123456 3
123456 4
q)0(`fn;(("=";`TradeId;123456);("in";`col2;2 4)))
TradeId col2
------------
123456 2
123456 4
注意 - 我使用 0()
在 kdb 本身内发送请求,但这应该等同于从 qPython 发送。您需要更改的位是 kdb 函数中的 c:.[c;(::;0);value];
@terrylynch 回答有效
特别是 qPython
来自python发送作品
c = [[ qtype.QLambda( '{x in y}'), numpy.string_('TradeId'), [123, 456,789]]]
我们正在尝试使用 qPython 构建函数查询。用简单的例子来构建 运行 时间的 where 条件。 我们在 KDB 服务器上定义了一个 q 函数,比如
fn:{[c]
t: (select from tbl);
:?[t;c;0b;()];
}
在Python中我们打开一个连接并发送条件
c = [['=', numpy.string_('TradeId'), 123456]]
result = conn.sendSync('fn', c)
当我执行此操作时,在 q 控制台中我看到 = 运算符为“=”。 问题是如何传递运算符
您可以 value
kdb 端的 string/char 将其从 string/char 转换为底层 kdb 运算符。这在您的示例中有效,但您可能需要一些额外的 work/testing 将其推广到您可能发送的所有可能的运算符:
q)tbl:([]TradeId:0 123456 123456 123456;col2:1 2 3 4)
q)fn:{[c] c:.[c;(::;0);value];t:(select from tbl); :?[t;c;0b;()];}
q)0(`fn;enlist("=";`TradeId;123456))
TradeId col2
------------
123456 2
123456 3
123456 4
q)0(`fn;(("=";`TradeId;123456);("in";`col2;2 4)))
TradeId col2
------------
123456 2
123456 4
注意 - 我使用 0()
在 kdb 本身内发送请求,但这应该等同于从 qPython 发送。您需要更改的位是 kdb 函数中的 c:.[c;(::;0);value];
@terrylynch 回答有效 特别是 qPython
来自python发送作品
c = [[ qtype.QLambda( '{x in y}'), numpy.string_('TradeId'), [123, 456,789]]]