“选择计数”返回“操作系统报告:无此类文件或目录”

问题描述

我明白了

"./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)

我认为它是表现奇怪的专栏之一...

更新:问题似乎主要在使用count i by colName1,colName2,colName3

时出现

更新:我检查了权限,一切似乎都还不错,表在给定的分区(2017.10.14)中,没有符号链接

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

解决方法

发生这种情况有多种原因:

  1. 文件/目录合法不存在。您是否检查过数据库目录以查看该表是否在每个日期切片中?如果没有,您应该查看.Q.chk来填写缺少的日期。

  2. 如果您无权读取该数据库中的文件/目录,也可能会收到此错误。它们可能是由其他用户编写的。

,

我认为“算我”可能是罪魁祸首。当应用于分区数据库时,它的行为会很奇怪。

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

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

q).Q.pn
tabA | 
tabB |

但是,如此处所示,“ count i”将针对所有日期分区执行。

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

对列运行“计数”将起作用。

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

作为一种解决方法,您可以更新查询以对某个键列(如果存在)执行“计数”。或者,您可以通过运行.Q.chk-https://code.kx.com/q/ref/dotq/#qchk-fill-hdb

来填充缺少的分区

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...