问题描述
我明白了
"./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
来填充缺少的分区