【问题标题】:How to get the length of every column in a kdb database?如何获取 kdb 数据库中每一列的长度?
【发布时间】:2021-03-29 21:45:28
【问题描述】:

我们已经看到 kdb 数据库损坏的问题,并且正在寻找一种方法来检查特定表中每个 kdb 列的长度是否相同。有关如何执行此操作的任何建议?

即想得到一个表中每一列的返回值和它的长度。

这些表有超过 200 列。有什么方法可以有效地解决这个问题?

感谢任何帮助。谢谢。

【问题讨论】:

    标签: kdb


    【解决方案1】:

    这样的事情可能对你有用。

    q)tables[]
    `positions`quote`trade
    q)count each flip trade
    time  | 40000
    sym   | 40000
    src   | 40000
    price | 40000
    amount| 40000
    side  | 40000
    

    您也可以在分区数据上运行相同的操作。

    q)count each flip select from ohlc where date=last date
    date     | 1440
    sym      | 1440
    exchange | 1440
    timestamp| 1440
    open     | 1440
    high     | 1440
    low      | 1440
    close    | 1440
    volume   | 1440
    

    编辑:上面使用的方法仅适用于未损坏的表,这可能不适合您的用例。

    如果数据损坏,您可以get每列从其在磁盘上的位置开始计数。

    q)cols[ohlc]!{count get hsym`$"/path/to/hdb/2020.02.09/ohlc/",string x}each cols ohlc
    date     | 1440
    sym      | 1440
    date     | 1440
    exchange | 1440
    timestamp| 1439
    open     | 1440
    high     | 1440
    low      | 1440
    close    | 1440
    volume   | 1440
    

    【讨论】:

    • 有没有一种优雅的方式来遍历多个表?即按表分组?
    • tables[]!count''[flip each get each tables[]] 创建一个字典,其中每个表作为键,其值为计数字典。
    • 您可以成功执行flip tradeselect from ohlc where date=last date 的事实意味着有问题的表确实具有相同长度的列。如果表已损坏,您的查询将失败。
    • 好点@IgorKorkhov。已对原始帖子进行了编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 2014-08-30
    • 1970-01-01
    • 2018-10-24
    • 2017-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多