How to construct a two level partition in kdb?

Viewed 132

Is it possible to have a two level partition scheme in kdb+? For example, one level is based on trading dates and the other level is on stock symbols. Thanks!

2 Answers

If you use the standard partitioned-by-date-and-`p#attribute-on-sym approach then you do effectively have a two level partition. It is very efficient to query/filter by date

select from table where date=x

and also generally still very efficient to query/filter by sym

select from table where date within(x;y),sym=z

Particularly if you run secondary threads and have good disk performance.

So you should get good performance when querying a sym across all history, and also when querying all syms for a given date. This is also the simplest way to write daily data.

I don't believe there's any real way to have a true two-level partition without writing the data twice in two different ways.

If your queries span a large range of symbols or involve extensive queries on each one that would benefit from parallel computation, you can segment by first letter ranges: A-N, N-Z, or finer grained than that.

As long as you maintain`p# within and across segments (so that e.g. IBM only appears in one place), you can throw threads and disks at the problem.

Related