cancel
Showing results for 
Search instead for 
Did you mean: 

Type error from Q chk

renbright
New Contributor II

Does anyone kwon how to solve/fix type error from .Q.chk?  how to check which files could have issue?

 

Thanks

2 REPLIES 2

rocuinneagain
Contributor III
Contributor III

There's a thread with some info on stackoverflow:

https://stackoverflow.com/questions/67272148/q-chk-gives-a-type-error-when-ran-on-a-hdb-how-can-i-de...

 

Running strace -p pid may help show where .Q.chk is falling down.

 

This is a basic outline of a helper function I created before to debug a part error when trying to load a HDB.

It may be a good starting point for finding the root cause issue for you too.

// https://code.kx.com/q/ref/system/#capture-stderr-output
q)tmp:first system"mktemp"
q){d:1_string x;{y:string y;(y;"D"$y),{r:system x;show last r;$[1~"J"$last r;(1b;-1_r;"");(0b;();-1_r)]} "ls ",x,"/",y," > ",tmp," 2>&1;echo $? >> ",tmp,";cat ",tmp}[d] each key x} `:badHDB
q)tab:flip `part`date`osError`files`error!flip {d:1_string x;{y:string y;(y;"D"$y),{r:system x;$[0~"J"$last r;(0b;-1_r;"");(1b;();first r)]} "ls ",x,"/",y," > ",tmp," 2>&1;echo $? >> ",tmp,";cat ",tmp}[d] each key x} `:badHDB
The resulting table:
part          date       osError files   error
-----------------------------------------------------------------------------------------------------------
"2001.01.01"  2001.01.01 0       ,"tab1" ""
"20011.01.01"            0       ,"tab2" ""
"2002.01.01"  2002.01.01 1       ()      "ls: cannot open directory 'badHDB/2002.01.01': Permission denied"
For a larger HDB filter down to partitions with issues:
select from tab where or[null date;osError]
 

 

sbruce01
New Contributor II
New Contributor II

As a simple starting point before investigating the data, type errors in Q suggest that you have provided the wrong datatype to a function. In the case of .Q.chk make sure you're passing in a filepath as per the documentation which is a symbol type. If you could share the line of code you're calling the .Q.chk in and the argument you're providing, as well as an ls on the directory you're performing the check on, that would help in isolating the problem. An example call of .Q.chk is:

 

 

.Q.chk[`:/path/to/dir]

 

 

N.B. You will get a type error if you call .Q.chk with a string:

 

 

q).Q.chk["/path/to/dir"]
'type
  [0]  .Q.chk["/path/to/dir"]

 

 

 Hope this helps!