我试图根据kdb的滴答架构在滴答函数中对表运行迭代联合联接:
table1:([]time:`timespan$();sym:`symbol$();var1:`float$());
if[not system"t";system"t 1000";
.z.ts:{
table2: ...
table1:table1 uj table2 / throws non descriptive error
`table1 uj table2 / throws type error
}
非描述性错误:
'table1
[0]()
我试图维护一个本地表,该表保留最后500行左右(带有动态列),以便运行进一步的处理。 但是我似乎无法从tick函数中更新表。 一个人应该如何实现这一功能? 谢谢
答案 0 :(得分:7)
您正在获取'table1作为错误,因为它不在.z.ts
中本地定义。在kdb中,如果对函数中的特定变量进行了本地分配,则kdb在函数中本地引用该变量。在table1
的示例中,您在.z.ts
内进行本地分配,然后尝试引用在table1
之外全局分配的.z.ts
。要解决您的问题,您必须像table1
这样在.z.ts
内全局分配table1::table1 uj table2
。
table1:([]time:`timespan$();sym:`symbol$();var1:`float$());
if[not system"t";system"t 1000";
.z.ts:{
table2: ...
table1::table1 uj table2
答案 1 :(得分:4)
作为一般规则
如果返回的信号是不是basic errors 之一,则归因于范围界定。
这假设您没有从给定列表中给出变量名,因此这是最佳实践。如果您遵循这种做法,那么您会知道,如果返回变量名,则是由于范围问题。
关于:范围,kdb不具有词汇范围,可以在here和here中找到有关kdb范围的更多详细信息。但是,正如Matt所详述的,这是由于kdb分析器在本地/全局混合分配中发生冲突