什么类型有 kdb 的 xbar 时间

What type has kdb's xbar time

我正在开发一个函数(在 python 中,使用 qPython)从 kdb 内部的 hdb table 获取历史数据。当涉及到参数时,我想在这个函数中给予最终用户尽可能多的自由。函数构建的查询看起来像这样:

select by 10 xbar time.minute from trade where date within('2017-06-31';'2017-07-01'),sym = 'instr1'

再次出现,但这次使用变量占位符:

'{[a:b;x;y;z]select by a xbar b from trade where date within(x;y),sym in z}',

我的问题是关于代替 btime.something。每当我传递 stringnumpy.string_bytenumpy.bytes_ 时,它都会抛出 'type exception.

kdb 中的这个 time.* 参数是什么类型,我应该使用什么 numpy/qPython 类型来传递它?

提前致谢!

您可以使用带点符号的任何时间类型;

例如time.dd, time.hh, time.mm, time.month, time.year.

这在函数中不受支持,因此您应该改用强制转换符号;

select by 10 xbar `minute$time from trade where date within('2017-06-31';'2017-07-01'),sym = 'instr1'

http://code.kx.com/q4m3/2_Basic_Data_Types_Atoms/#257-constituents-and-dot-notation

您可以使用 .像这样选择的函数中的符号,例如

q){select count i by time.minute from x}([]time:2#.z.p)
minute| x
------| -
19:43 | 2

你这里的类型错误问题是函数声明:

{[a:b;x;y;z]select by a xbar b from trade where date within(x;y),sym in z}

声明应该是

{[a;b;x;y;z]select by a xbar b from trade where date within(x;y),sym in z}

即你有一个 : 而不是 ;

您尝试执行的转换的问题是返回的数据类型不同,具体取决于您转换的方式。您也不能按照您尝试的方式将 "b" 传递给函数。就我个人而言,我会坚持使用时间戳(假设时间是时间戳类型)并使用参数的分辨率来指示它,例如

q){[b;t] select count i by b xbar time from t}[0D01;([]time:0D 0D00:01 0D01+.z.p)]                                                                                                

time                         | x
-----------------------------| -
2017.08.01D19:00:00.000000000| 2
2017.08.01D20:00:00.000000000| 1
q){[b;t] select count i by b xbar time from t}[0D00:01;([]time:0D 0D00:01 0D01+.z.p)]                                                                                             
time                         | x
-----------------------------| -
2017.08.01D19:48:00.000000000| 1
2017.08.01D19:49:00.000000000| 1
2017.08.01D20:48:00.000000000| 1
q){[b;t] select count i by b xbar time from t}[0D00:00:01;([]time:0D 0D00:01 0D01+.z.p)]                                                                                          
time                         | x
-----------------------------| -
2017.08.01D19:48:30.000000000| 1
2017.08.01D19:49:30.000000000| 1
2017.08.01D20:48:30.000000000| 1

至于 python 类型,不确定,但我认为它是 numpy.datetime64