【问题标题】:Why first column in kdb+tick cannot be of String type为什么 kdb+tick 中的第一列不能是字符串类型
【发布时间】:2019-06-25 06:29:31
【问题描述】:

我尝试将架构中的第一列设置为字符串类型,但数据未在tickerplant中更新。

然后我更改了架构中符号类型的第一列,它运行良好。

在尝试调试时,我遇到了一篇文章,它说将时间跨度或符号类型的第一列放在表中总是好的。

  1. 为什么不能将String类型的列放在表的开头(因为String是字符列表(复杂类型)还是有其他原因)?
  2. 为什么在每个表的开头放置符号/时间跨度列是好的/要求?

【问题讨论】:

    标签: kdb


    【解决方案1】:

    模式中使用的类型应该与 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 会假设第一列是临时的,如果不是,则添加时间跨度。如果您已经发送了时间戳,这很有用,因为您可以从提要中提取由 TP 处理所花费的时间。

    通过首先发送一个字符串,TP 将在您的数据中添加一个额外的列。这将导致不匹配(如果您已经提供了时间跨度)或类型错误(通过将时间跨度插入字符串列,反之亦然)。

    改变这一切将是微不足道的。例如,要检查第二列而不是第一列的时间跨度,它只是第一个 1_x。也许您总是想检查 EOD(即,如果您实际上以时间跨度作为第一列发送数据,在这种情况下,您会将 .z.ts[] 调用放在第一个 if 语句之外。

    总结

    1. 列顺序取决于您使用的更新功能。添加时间跨度可以更好地安排从馈送到摄取的数据吞吐量。根据您尝试执行的操作,您可能想要添加时间戳,或者只是使用您在 feedhandler 中添加的时间值。
    2. 字符串和符号的使用详见here。我想说 Ferenc 部分不正确,强烈建议使用名为 sym 的列以符合标准,但您可以相对轻松地更新代码以使用不同的列名(您需要将 tick.q 调整为不检查列时间和符号)。不过,这可能会让其他人的工作变得更加困难。

    【讨论】:

      【解决方案2】:

      股票代码工厂处理的所有表格都必须有列 sym 作为符号。订阅者必须提供该表,并且可以提供他们订阅的一组可选的 sym 值。

      理论上,sym 列也可以是字符串,但出于性能原因,sym 列更好。查找符号比查找字符串要快,因为符号比较只是幕后的整数比较。

      【讨论】:

        猜你喜欢
        • 2021-02-24
        • 1970-01-01
        • 1970-01-01
        • 2020-09-25
        • 1970-01-01
        • 1970-01-01
        • 2012-12-29
        • 2011-01-27
        • 2019-09-20
        相关资源
        最近更新 更多