QStudio
Query kdb+ Servers and Chart Results.
You may encounter these error messages when working in kdb, here's what they mean:
limit | Attempt to create list longer than allowable maximum |
---|---|
params | Too many parameters (8 max) |
branch | A branch (if;do;while;$[.;.;.]) more than 255 byte codes away |
rank | Invalid number of arguments |
constants | Too many constants (max 96) |
globals | Too many global variables (32 max) |
locals | Too many local variables (24 max) |
mlim | More than 999 nested columns in splayed table |
glim | `g# limit, kdb is currently limited to 99 concurrent `g#'s |
stop | A client query took longer than the time allowed. |
abort | The maximum memory that kdb was allowed, was exceeded. |
There are also a number of architectural limitations namely:
The limit error is either caused by trying to create too large a list (2 billion items usually) or trying to transfer an object to/from a kdb process that is over 2GB in size. e.g.:
The 2GB limit is because internally integers are used for storage and addressing and 2^31 is 2,147,483,648. You will sometimes see this error when retrieving a large of results with many columns. The only workaround is to transfer the table in multiple requests.
You have tried to declare too many variables at a given scope. Kdb stores functions as bytecode, this code is only built to handle reasonable limits on the number of variables. If we try to create too many variables at a given scope we get an error, e.g. too many function local variables:
The general solution is to encapsulate data into objects (lists, tables, dictionaries) rather than having many separate variables
Params error is caused when you try to create a function with more than 8 parameters. To us this sounds like a reasonable tradeoff to make functions readable. If you find your hitting this limit, try to group the arguments into cohedive objects (lists/dictionaries).
This error is caused when a branch like an if condition, $ if-else condition, while, do etc. has too many statements in it. If you receive this error you should modularise your code into more functions, both to fix the error and to make your code more readable. (See our guide on q coding standards)
Rank errors happen when you attempt to call a function and supply too many parameters. There is also a particularly tricky variation of this where you try to use default parameters to a qsql query. The parser gets confued and does not recognide them as parameters. As shown below:
Using a -T setting, A maximum time allowed for a remote query can be configured.
In this example we call a function that exceeds that timeout and throws a stop error:
Server q -p 5000 -T 2 |
Client |
A query used more memory than the maximum memory permitted, as set using the -w kdb command line option.
An error is thrown and the kdb process is stopped.
Many errors are caused by poorly written code, we recommend following the q language style guidelines which should eliminate most these problems. Other errors are reported due to OS limits, these are usually a hint that you are using kdb for a problem that it is not designed to solve. You can alter the OS to handle these cases but you may increasingly struggle to get the performance you want. That leaves a very few unfortunately tricky cases where kdb has sharp edges where it's basically user beware
Query kdb+ Servers and Chart Results.