KX Community

Find answers, ask questions, and connect with our KX Community around the world.

Home Forums kdb+ Type error from Q chk

  • Type error from Q chk

    Posted by renbright on March 16, 2023 at 12:00 am

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

     

    Thanks

    renbright replied 2 months, 1 week ago 3 Members · 2 Replies
  • 2 Replies
  • rocuinneagain

    Member
    March 16, 2023 at 12:00 am

    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-debug-or-what-should-i

     

    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" "" 
    "2001.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]

     

  • Laura

    Administrator
    March 16, 2023 at 12:00 am

    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!

Log in to reply.