【问题标题】:Can I set column attributes for a kdb partitioned table?我可以为 kdb 分区表设置列属性吗?
【发布时间】:2013-06-04 18:11:52
【问题描述】:

是否可以为分区表设置列属性?

q)h "update `g#ticker from `pmd"
'par
q)h "update `s#ts from `pmd"
'par
q)

我应该在运行分区之前在内存表上设置属性吗?分区后属性会保留吗?

【问题讨论】:

  • 刚刚阅读这个问题告诉我,我可以使用update 语句向表列添加属性。谢谢!

标签: kdb


【解决方案1】:

看看dbmaint.q中的setattrcol。该脚本在处理分区数据库时非常有用。

【讨论】:

  • 为了应用排序属性,数据必须按升序排列。应用 s# 不会对数据进行排序,它只是表示列表按升序排序。
  • 谢谢。在我运行 setattrcol() 之后,我添加到数据库中的所有日期看起来都包含该属性。这将是一致的,因为该属性是在表级别设置的,而不仅仅是针对当前分区的日期。一定有一个指标存储在某处,告诉 kdb 在我插入新日期的任何时候建立组索引?
  • 关于`s,应该对ts列进行排序,它是一个随每一行递增的本地时间戳。错误代码也会立即返回。我想知道 kdb 如何检查该列是否没有立即排序,因为我每个日期都有数百万个条目。
  • 您能否给出您在尝试应用排序属性时所做的调用和遇到的错误?
  • 这表明数据实际上没有排序。我的猜测是 q 足够聪明,可以在发现元素乱序后立即排除错误,因此不需要花费大量时间。您可以尝试先对数据进行排序。您可以修改功能 here 以处理分区表。
【解决方案2】:

为了对磁盘上的分区进行排序,您需要遍历分区并使用 xasc,如下所示: 对于每个分区 .. 假设您有一个按日期分区的报价表以按“时间戳”排序

{`timestamp xasc `$":./2014.04.20/quote/"}

完成对每个分区的排序后,s attribute will appear ontimestamp 列..

q)meta quote
  c        | t f a
  ---------| -----
  date     | d    
  timestamp| p   s
  pair     | s    
  side     | c    
  ...

【讨论】:

    猜你喜欢
    • 2016-06-25
    • 2011-04-26
    • 2019-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多