我尝试将架构中的第一列设置为String类型,但数据未在tickerplant中更新。
然后,我更改了架构中属于Symbol类型的第一列,并且该列运行良好。
在尝试调试时,我遇到了一篇文章,该文章指出在表中放置类型为timepan或symbol的第一列总是很好的。
答案 0 :(得分:2)
模式中使用的类型应该与TP中的feedhandler调用的函数很好地配合使用。当指定了计时器时,我已经分解了TP的默认.u.upd。
// All the following is defined in the .u context
upd:{[t;x]
// t - symbol
// x - list of lists
// Check if the first type is a timespan. First list should be a list of timespan
// Vanilla TP will add timespans to the data
if[not -16=type first first x;
// If the current time is greater than the gloabl .u.d then run the timer, causing an EOD
if[d<"d"$a:.z.P;
.z.ts[]];
// Get the timespan
a:"n"$a;
// Append the timespan on, handling differently if only a list of atoms
x:$[0>type first x;
a,x;
(enlist(count first x)#a),x]
];
// Insert the data
t insert x;
// if the handle .u.l is defined, add to the logfile and increment the total count .u.j
if[l;
l enlist (`upd;t;x);j+:1];
}
由此您可以看到,默认情况下,TP会假设第一列应该是临时的,如果不是,则添加时间跨度。如果您已经发送了时间戳,这将很有用,因为您可以从Feed中提取要由TP处理的时间。
通过首先发送一个字符串,TP将在您的数据中添加一个附加列。这将导致不匹配(如果您已经提供了时间跨度)或类型错误(通过将时间跨度插入到字符串列中,反之亦然)。
改变所有这些都是微不足道的。例如,要检查第二列而不是第一列的时间跨度,它将只是第一列1_ x。也许您总是想检查EOD(即,如果您实际上以时间跨度作为第一列来发送数据,在这种情况下,您可以将.z.ts []调用放在第一条if语句之外。
总结
答案 1 :(得分:1)
股票行情工厂处理的所有表都必须将列 sym 作为符号。订阅者必须提供表,并可以提供他们订阅的一组可选的sym值。
理论上,sym列也可以是字符串,但出于性能原因,symbol更好。查找符号比查找字符串要快,因为符号比较只是幕后的整数比较。