【发布时间】:2021-03-29 21:45:28
【问题描述】:
我们已经看到 kdb 数据库损坏的问题,并且正在寻找一种方法来检查特定表中每个 kdb 列的长度是否相同。有关如何执行此操作的任何建议?
即想得到一个表中每一列的返回值和它的长度。
这些表有超过 200 列。有什么方法可以有效地解决这个问题?
感谢任何帮助。谢谢。
【问题讨论】:
标签: kdb
我们已经看到 kdb 数据库损坏的问题,并且正在寻找一种方法来检查特定表中每个 kdb 列的长度是否相同。有关如何执行此操作的任何建议?
即想得到一个表中每一列的返回值和它的长度。
这些表有超过 200 列。有什么方法可以有效地解决这个问题?
感谢任何帮助。谢谢。
【问题讨论】:
标签: kdb
这样的事情可能对你有用。
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 trade 或select from ohlc where date=last date 的事实意味着有问题的表确实具有相同长度的列。如果表已损坏,您的查询将失败。