将键值对数据拆分为新列

split keyvalue pair data into new columns

我的 table 看起来像这样:

id   |   data
 1   |   A=1000 B=2000
 2   |   A=200 C=300

在kdb中有没有办法对数据进行归一化,使得最终的table如下:

id   | data.1 | data.2
 1   |      A |   1000
 1   |      B |   2000
 2   |      A |    200
 2   |      C |    300

您可以使用 vs(来自标量的向量)的组合,每个 'ungroup

q)t:([]id:1 2;data:("A=1000 B=2000";"A=200 C=300"))
q)t
id data
------------------
1  "A=1000 B=2000"
2  "A=200 C=300"

q)select id, dataA:`$data[;0], dataB:"J"$data[;1] from 
  ungroup update data: "=" vs '' " " vs ' data from t

id dataA dataB
--------------
1  A     1000
1  B     2000
2  A     200
2  C     300

我不建议使用 . 命名列,例如data.1

一种选择是利用 0: 及其键值解析功能,记录在此处 https://code.kx.com/q/ref/file-text/#key-value-pairs 例如

q)ungroup delete data from {x,`data1`data2!"S= "0:x`data}'[t]
id data1 data2
---------------
1  A     "1000"
1  B     "2000"
2  A     "200"
2  C     "300"

假设您希望 data2 是长数据类型 (j),可以做到

update "J"$data2 from ungroup delete data from {x,`data1`data2!"S= "0:x`data}'[t]