标签: kdb

KDB 合并/连接不同的表

我如何加入两个不同的表,例如

all_order_ask:([]ask:();ask_qty:();exchange_name_ask:())
all_order_bid:([]bid:();bid_qty:();exchange_name_bid:())
Run Code Online (Sandbox Code Playgroud)

并得到 =====>

final_order:ask:();ask_qty:();exchange_name_ask:();bid:();bid_qty:();exchange_name_bid:()
Run Code Online (Sandbox Code Playgroud)

两个表的行数相同

join kdb

-1
推荐指数
1
解决办法
507
查看次数

kdb - 如何通过引用 kdb 函数传递表

定义问题

myt给定一个由以下定义的空表

myt:([] id:`int$(); score:`int$())
Run Code Online (Sandbox Code Playgroud)

例如,向其中插入一条或多条记录很简单

`myt upsert `id`score!1 100
Run Code Online (Sandbox Code Playgroud)

但当涉及到定义一个插入给定表的函数时,这似乎是一个不同的技巧。

第一次尝试的版本可能是

upd:{[t] t upsert `id`score!42 314;} 

upd[myt]
Run Code Online (Sandbox Code Playgroud)

显然它不会更新myt自身,只是更新它的本地副本版本。

可能的解决方案的困难

可能的解决方案1:使用全局变量代替

myt为全局变量,然后将在函数内访问该变量。

upd:{`myt upsert `id`score!42 314;}

upd[]
Run Code Online (Sandbox Code Playgroud)

它看起来是一个很好的解决方案,预计是否myt需要很多。在这种情况下,必须提供大量的upd功能副本,如下所示

upd0:{`myt0 upsert `id`score!42 314;}
upd1:{`myt1 upsert `id`score!42 314;}
upd2:{`myt2 upsert `id`score!42 314;}
...
Run Code Online (Sandbox Code Playgroud)

所以,全局变量的解决方案在这里并不是一个好的解决方案。

可能的解决方案2:修改函数外部的表

还可以通过myt在函数外部进行修改来解决问题,通过删除结尾返回修改后的结果;

upd:{[t] t upsert `id`score!42 314}  / return inserted valued

myt:upd[myt]
Run Code Online (Sandbox Code Playgroud)

有用!但在运行这段代码数百万次之后,它的运行速度越来越慢。因为这个解决方案抛弃了“就地”属性upsert,因此复制开销随着表大小的变大而增加。

通过引用传递参数?

也许这里有“按引用传递”解决方案的概念。或者也许 q 对于这个问题有自己的解决方案,但我还没有得到本质的想法。

[更新] 通过在按名称调用中添加“`”来解决

myt正如cillianreilly回答的那样,在将其传递给函数时,在前面添加“`”符号将其声明为全局变量很简单。所以完美的解决办法就是直接。

upd:{[t] t …
Run Code Online (Sandbox Code Playgroud)

kdb

-1
推荐指数
1
解决办法
505
查看次数

KDB:如何使用列表搜索表

我有下表t:

t:([]sym:3#`ibm;time:10:01:01 10:01:04 10:01:08;price:100 101 105;val:("hello";"world";"test"))
Run Code Online (Sandbox Code Playgroud)

如何执行以下查询:

select from t where val in ("hello"; "test")
Run Code Online (Sandbox Code Playgroud)

其中我期待以下结果:

sym time        price val
---------------------------
ibm 10:01:01    100   hello
ibm 10:01:08    105   test
Run Code Online (Sandbox Code Playgroud)

kdb

-2
推荐指数
1
解决办法
171
查看次数

kdb - 如何将十六进制颜色代码生成为字符串或符号

我想在内存表上创建一列,该列根据人名(另一列)生成颜色十六进制代码。一个快速的谷歌并没有给出太多,所以想知道是否可以在这里给出任何指示。例如

update colour: <some code and use username col as input> from table
Run Code Online (Sandbox Code Playgroud)

kdb

-3
推荐指数
1
解决办法
178
查看次数

标签 统计

kdb ×4

join ×1