KDB/Q中如何替换表列的0N值?解决CSV保存类型错误
解决kdb+保存CSV时的'type错误及混合类型列处理
问题根源
保存CSV时触发'type错误,是因为NEW_COLUMN列存在混合数据类型:元数据显示列类型为j(长整型),但实际包含长整型空值0N、符号类型和N,类型不统一导致save`操作失败。
关于0N
0N是kdb+中长整型(long)的空值,不同数据类型对应不同空值标识(如浮点型空值为0Nf,字符串空值为0Ns)。但此处列中同时存在长整型空值与符号类型数据,跨类型操作(如直接用=比较0N)会触发'type错误。
解决方案
1. 筛选0N行(正确方式)
不能直接用NEW_COLUMN = 0N,因为符号与长整型无法跨类型比较。可通过以下方式筛选:
/ 方式1:通过type判断(长整型type值为-11,0N的type为-11) select from tbl where type NEW_COLUMN = -11 / 方式2:用isnull判断数值空值 select from tbl where isnull NEW_COLUMN
2. 统一列类型并替换0N为.
为了正常保存CSV,需先将列中所有数据转为统一类型(推荐字符串类型),再替换空值为.:
/ 步骤1:将列转为字符串类型,0N会转为空字符串"",符号``转为"",`N转为"N" update NEW_COLUMN:string NEW_COLUMN from `tbl / 步骤2:将空字符串替换为"." update NEW_COLUMN:?[NEW_COLUMN=""; "."; NEW_COLUMN] from `tbl / 或合并为一步 update NEW_COLUMN:replace[""; "."] string NEW_COLUMN from `tbl
3. 验证并保存CSV
处理后验证列数据:
select distinct NEW_COLUMN from tbl
输出应包含.、"N"等统一类型的值,此时执行保存操作即可成功:
save `:tbl.csv
内容的提问来源于stack exchange,提问作者mmv456
相关产品推荐
相关产品推荐

