How can I reorder column names of a splayed table on disk?
Modify the file .d in the splayed table directory. The contents are editable via operators get and set.
$ rlwrap q sp.q
KDB+ 2.7 2011.02.16 Copyright © 1993-2011 Kx Systems
+`p`city!(`p$`p1`p2`p3`p4`p5`p6`p1`p2;`london`london`london..
(+(,`color)!,`blue`green`red)!+(,`qty)!,900 1000 1200
+`s`p`qty!(`s$`s1`s1`s1`s2`s3`s4;`p$`p1`p4`p6`p2`p2`p4;300 ..
q)sp
s p qty
———
s1 p1 300
s1 p2 200
s1 p3 400
q)`:splaydir/ set sp
`:splaydir/
q)\ls -a splaydir
,”.”
“..”
“.d” // this is where the col names live
,”p”
“qty”
,”s”
q)get `:splaydir/.d
`s`p`qty
q)`:splaydir/.d set reverse get `:splaydir/.d
`:splaydir/.d
q)get `:splaydir/.d
`qty`p`s
q)
Verify with a fresh kdb instance:
$ rlwrap q splaydir
KDB+ 2.7 2011.02.16 Copyright © 1993-2011 Kx Systems
q)\v
,`splaydir
q)splaydir
qty p s
——-
300 0 0
200 1 0
400 2 0
q)
See also: xcol and xcols faq{.}