【问题标题】:.Q.chk gives a "type" error when ran on a hdb. how can I debug or what should I check?.Q.chk 在 hdb 上运行时会出现“类型”错误。我该如何调试或我应该检查什么?
【发布时间】:2021-04-26 18:43:53
【问题描述】:

.Q.chk 在我们的一个 hdb 上运行时会出现类型错误。

有什么想法会导致这种情况吗?

相同的 hdb 格式适用于不同的主机。

【问题讨论】:

    标签: kdb


    【解决方案1】:

    如果出现.Q.chk 错误,并且不是文档中提到的“没有这样的文件或目录”错误 (https://code.kx.com/q/ref/dotq/#qchk-fill-hdb),那么您的数据库处于某种损坏状态,可能是任意数量的原因(以 kdb 版本 =3.6 写入的数据混合,或以 kdb 版本 =3.0 写入的数据混合,它可能是某处的损坏文件,日期内的日期文件夹文件夹...列表太大)。

    您的选择是:

    1. 检查支持.Q.chk的k代码并逐行运行k代码(或将其转换为q代码并运行它)以查看问题所在。

    2. 这个话题早在 2017.08.22 就出现在 k4 listbox/topicbox 上。有一些很好的建议:

      一个。为数据库中的每个分区表查询 select from table where i=0 以查看哪个给出了错误以及原因。此查询故意低效,因为它会扫描每个分区,但这就是重点 - 它应该有助于找到错误的分区。

      b.在 linux 上,在启动 .Q.chk 之前在 strace 中运行 q,您可能会在那里获得一些信息。

      c。确保日期目录中没有任何日期目录。你可以写一个shell命令或q命令来扫描这个

    3. 我多年前编写了这个“选择性”.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];
    

    但是请注意,我已经多年没有使用或测试过该功能,因此使用它的后果自负。可能先在其他地方测试一下。

    【讨论】:

      猜你喜欢
      • 2020-11-15
      • 1970-01-01
      • 2021-07-11
      • 1970-01-01
      • 2021-04-27
      • 1970-01-01
      • 2022-11-13
      • 1970-01-01
      • 2020-12-25
      相关资源
      最近更新 更多