【发布时间】:2021-04-26 18:43:53
【问题描述】:
.Q.chk 在我们的一个 hdb 上运行时会出现类型错误。
有什么想法会导致这种情况吗?
相同的 hdb 格式适用于不同的主机。
【问题讨论】:
标签: kdb
.Q.chk 在我们的一个 hdb 上运行时会出现类型错误。
有什么想法会导致这种情况吗?
相同的 hdb 格式适用于不同的主机。
【问题讨论】:
标签: kdb
如果出现.Q.chk 错误,并且不是文档中提到的“没有这样的文件或目录”错误 (https://code.kx.com/q/ref/dotq/#qchk-fill-hdb),那么您的数据库处于某种损坏状态,可能是任意数量的原因(以 kdb 版本 =3.6 写入的数据混合,或以 kdb 版本 =3.0 写入的数据混合,它可能是某处的损坏文件,日期内的日期文件夹文件夹...列表太大)。
您的选择是:
检查支持.Q.chk的k代码并逐行运行k代码(或将其转换为q代码并运行它)以查看问题所在。
这个话题早在 2017.08.22 就出现在 k4 listbox/topicbox 上。有一些很好的建议:
一个。为数据库中的每个分区表查询 select from table where i=0 以查看哪个给出了错误以及原因。此查询故意低效,因为它会扫描每个分区,但这就是重点 - 它应该有助于找到错误的分区。
b.在 linux 上,在启动 .Q.chk 之前在 strace 中运行 q,您可能会在那里获得一些信息。
c。确保日期目录中没有任何日期目录。你可以写一个shell命令或q命令来扫描这个
我多年前编写了这个“选择性”.Q.chk 函数,它允许您一次运行.Q.chk 一个表 - 这可以帮助您将问题缩小到特定表。
k).Q.chk2:{f:{`/:'x,'d@&(d:!x)like"[0-9]*"};d@:>.:'$last'`\:'d:$[`par.txt in!x;,/f'-1!'`$0:`/:x,`par.txt;f x]
{[e;u;d]u[i]{.[x;(y;`);:;?[z;();0b;()]]}[d]'e i:&~u in!d}[d[(+u in/:t)?\:1b](0#.)'u,'`;u:.q.inter[(),y;?,/t:!:'d]]'d};
.Q.chk2[`:.;`table1`table2];
但是请注意,我已经多年没有使用或测试过该功能,因此使用它的后果自负。可能先在其他地方测试一下。
【讨论】: