Kdb ';选择计数';“返回”;操作系统报告:没有这样的文件或目录;

Kdb ';选择计数';“返回”;操作系统报告:没有这样的文件或目录;,kdb,Kdb,我明白了 "./2017.10.14/:./2017.10.15/tableName. OS reports: No such file or directory" 当我试着去做 select count i by date from tableName where date within(.z.d-5;.z.d) 如果我这样做了,那就行了 select colName from trackFeedStats where date within(.z.d-5;.z.d)

我明白了

"./2017.10.14/:./2017.10.15/tableName. OS reports: No such file or directory"
当我试着去做

select count i by date from tableName where date within(.z.d-5;.z.d)
如果我这样做了,那就行了

select colName from trackFeedStats where date within(.z.d-5;.z.d)
我猜是某个专栏的行为很奇怪

更新:问题似乎主要是在使用按colName1、colName2、colName3计数i时出现的

更新:我检查了权限,一切似乎都正常,表位于给定分区中(2017.10.14),没有符号链接


更新:我正在寻找修复数据库的建议。查询没有那么重要

出现这种情况的原因有很多:

  • 文件/目录不在那里。您是否检查了数据库目录以查看表是否位于每个日期片中?如果没有,您应该查看.Q.chk以填充缺失的日期

  • 如果您没有读取该数据库中的文件/目录的权限,也会出现此错误。它们可能是由其他用户编写的等等


  • 我想我伯爵可能是罪魁祸首。当应用于分区数据库时,它的行为异常

    尽管您在where子句中指定了一个日期列表,但在后台,kdb正在对数据库中的所有表分区执行“count i”

    作为参考,.Q.pn维护分区计数-

    q).Q.pn
    tabA | 
    tabB |
    
    但是,正如这里演示的,“counti”将针对所有日期分区执行

    q)select count i from tabA where date within 2020.10.10 2020.09.12;
    q).Q.pn
    tabA | 8001 7998 8101 0 0 8002 8102 7940 7999 0 0 0 0 0 0 0 0 0 0 0 0 
    tabB | ()
    
    由于某些原因,如果向where子句添加额外的约束,.Q.pn不会更新

    q)select count i from tabA where date within 2020.10.10 2020.09.12,price>0;
    q).Q.pn
    tabA |
    tabB |
    
    查询将实际运行。例如,在这个数据库中,有一些空的tabB分区

    q)select count i from tabB where date within .z.d + -7 0
    './2020.09.30/tabB. OS reports: No such file or directory
    
    但是,如果我们向where子句添加一些其他约束,查询将按我们希望的方式运行

    q)select count i from tabB where date within .z.d + -7 0,not null sym
    x
    -----
    16948
    
    对列运行“count”将起作用

    q)select count sym from tabB where date within .z.d + -7 0
    x
    -----
    16948
    

    作为一种解决方法,您可以更新查询以对某个键列(如果存在)执行“计数”。或者,您可以通过运行.Q.chk-

    来填充缺少的分区。我检查了表所在的文件夹。我检查了权限,同一用户创建了文件夹。您是否检查了日期文件夹中的隐藏文件和文件夹?正如Matt Moore提到的,您的错误中的文件路径看起来不正确:
    /2017.10.14/:/2017.10.15/tableName
    ,它应该类似于
    。/2020.09.30/tabB
    ,作为一个通用点,在日期分区的表上执行类似于
    selectcount1b by
    的操作比
    selectcounti by
    更好。我想我对修复数据库更感兴趣。查询没有那么重要。您是否对数据库运行了.Q.chk?您是否尝试过.Q.chk?这将有助于“修复”数据库,它会为您创建缺失的表,2017.10.14分区内2017.10.15的文件路径看起来非常奇怪。查看该目录,看看是否有人在那里意外地保存了不正确的内容