如何在kdb中排除符合指定字符串模式的表记录
kdb字符串匹配排除记录解决方案
问题原因
原写法逻辑是对每一条匹配规则单独执行排除查询,再将多次查询结果合并:第一次排除abc*模式得到2条记录,第二次排除eeee*模式得到3条记录,合并后自然会出现重复记录,且会包含匹配了其他规则的行。
正确写法
方法1:单次查询直接判断(性能最优)
直接在where条件中判断当前行是否不匹配所有规则,无需循环查询再合并:
select from tab where not any cola like/:a
执行后即可得到预期结果:
cola colb -------------- "bcdefgh" b "tttttt" c
方法2:基于已有匹配结果取差集
如果你已经提前得到了符合规则的记录,也可以直接用except取原表和匹配记录的差集:
// 先拿到符合匹配规则的记录 match_tab:raze {select from tab where cola like x } each a // 取差集得到未匹配的记录 tab except match_tab
内容的提问来源于stack exchange,提问作者Terry
相关产品推荐
相关产品推荐

