如何解决“选择计数”返回“操作系统报告:无此类文件或目录”
我明白了
"./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)中,没有符号链接
更新:我正在寻找有关修复数据库的建议。查询不是那么重要
解决方法
发生这种情况有多种原因:
-
文件/目录合法不存在。您是否检查过数据库目录以查看该表是否在每个日期切片中?如果没有,您应该查看.Q.chk来填写缺少的日期。
-
如果您无权读取该数据库中的文件/目录,也可能会收到此错误。它们可能是由其他用户编写的。
我认为“算我”可能是罪魁祸首。当应用于分区数据库时,它的行为会很奇怪。
尽管您已在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
来填充缺少的分区版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。