KDB查询中=加反引号过滤eventtype列异常问题求助
我来帮你解决这个KDB/q的问题,看起来你是在构造查询的时候把赋值操作和过滤条件搞混了,导致列名和值不符合预期。
问题根源
你在select子句里写的eventtype=AR其实是一个布尔比较表达式(检查当前行的eventtype是否等于AR),q会把这个表达式的结果(1或0,布尔值)作为新列返回,而默认的匿名列名就是X——这就是你看到列头变X、数据是1/0的原因。
两种修正方案
根据你的需求,分两种场景给出解决办法:
场景1:过滤原表中eventtype本身就是AR的行,同时保留eventtype列并显示AR
把过滤条件移到where子句里,同时在select中明确指定要保留的列(包括eventtype):
raze{[tradedate] setdate tradedate; `rootordid`clordid xasc select ltime transacttime, apptype, rootordid, eventtype, msgcategory from orders where (apptype like "STEALTH US") or (apptype like "BOMB US") , eventtype=`AR // 将eventtype的过滤条件移到where子句 }each .utl.get_bdts[2017.12.04;2017.12.05]
场景2:给所有符合apptype条件的行强制设置eventtype为AR(不管原表的eventtype值)
在select子句里用赋值语法(直接指定列值为AR),而不是比较操作:
raze{[tradedate] setdate tradedate; `rootordid`clordid xasc select ltime transacttime, apptype, rootordid, eventtype:`AR, msgcategory from orders where (apptype like "STEALTH US") or (apptype like "BOMB US") }each .utl.get_bdts[2017.12.04;2017.12.05]
额外说明
- 第一种方案是过滤原数据,只保留符合
eventtype=AR的行,列值就是原表的AR; - 第二种方案是主动赋值,不管原数据的
eventtype是什么,都将该列统一设为AR; - q中,
=在不同语境下作用不同:在select子句里是比较,在赋值场景(比如eventtype:AR)里是指定列值。
内容的提问来源于stack exchange,提问作者capser
相关产品推荐
相关产品推荐

