KDB+/Q中如何将迭代函数的输出存储到独立的唯一表中
实现方案(q语言/kdb+环境)
你需要将迭代返回的结果列表依次绑定到对应名称的变量中,具体实现分两种场景:
场景1:按顺序命名为a、b、c...
完整代码如下:
// 1. 定义原查询函数 function:{[x] select Y from table1 where date=x} // 2. 获取table2的所有唯一日期(此处用exec返回原子列表,避免原写法select返回单列表的问题) dates:exec distinct date from table2 // 3. 迭代执行函数得到结果列表 res_list:function each dates // 4. 生成a、b、c...序列的变量名 var_names:`$'a + til count res_list // 5. 批量赋值到对应变量 var_names set/: res_list
执行完成后,第一个日期的查询结果存储在表a中,第二个存储在b中,以此类推。
场景2:按日期命名表(更推荐,避免顺序对应混乱)
如果不需要严格用a、b命名,更建议用日期作为表名后缀,后续检索更方便,修改第4步的变量名生成逻辑即可:
// 生成带日期的表名,例:t_2021.11.10 var_names:`$("t_",/:string dates) var_names set/: res_list
注意事项
- 如果待处理的日期数量超过26个,a-z的单字母命名会溢出,优先选择日期后缀的命名方案
- 如果需要将表持久化到磁盘,在赋值后新增
save each var_names即可将所有表存为本地文件
内容的提问来源于stack exchange,提问作者Cole
相关产品推荐
相关产品推荐

