KDB中如何用前值填充表的空值与空字符串?
KDB/Q 填充表中空值(含字符串空串)的解决方案
问题场景
现有KDB表:
t:([] c1:1 0n 3 4;c2:("abcd";"efgh";"igkl";""))
表结构如下:
c1 c2 --------- 1 "abcd" "efgh" 3 "igkl" 4 ""
需要用前一行有效值填充表中的缺失值(数值列的0n、字符串列的空串""),预期结果:
c1 c2 --------- 1 "abcd" 1 "efgh" 3 "igkl" 4 "igkl"
直接执行fills t时报错:"length: Incompatible list lengths."
原因分析
fills函数默认仅识别数值类型的缺失值0n和字符串类型的缺失值0N,但原表中字符串列的空串""不属于fills可处理的缺失值范畴,直接作用于表时,函数无法正确解析字符串列的空串,导致列长度匹配错误。
解决方案
先将字符串列中的空串""转换为字符串类型的缺失值0N,再对表应用fills:
针对指定列处理
// 先替换c2列的空串为字符串缺失值,再执行fills fills update c2:?[c2="";0N$"";c2] from t
通用处理(自动识别所有字符串列)
如果表中有多个字符串列,可批量处理:
// 遍历所有字符串列,替换空串为0N后执行fills fills {[col] ?[col="";0N$"";col]}[;] t where type each t=10h
执行上述代码后,即可得到预期的填充结果。
内容的提问来源于stack exchange,提问作者sevenmiracle
相关产品推荐
相关产品推荐

