我有一个 kdb 表,其格式可以概括为
app type labels
--------------------------------------------------------
app1 frontend ("language:js";"owner:bob";"license:GPL")
app2 backend ("language:go";"owner:alice")
我无法弄清楚如何将其labels
直接“分解”到该表中自己的列中并获得类似的
app type language owner license
-------------------------------------------
app1 frontend "js" "bob" "GPL"
app2 backend "go" "alice" ""
(注意可选的 kv)
我怎样才能做到这一点?我觉得我错过了一些非常简单的东西......
首先,不要用作
type
列名。它是 kdb+ 中的保留关键字。这个想法是拉出标签列,单独操作它,然后逐条记录重新加入到原始表中。
这是第一遍,它可以得到你想要的,但是有点混乱:
简短版本:
为了简洁起见,将解析逻辑抽象为单独的函数:
还值得一提的是
0:
,它可用于拆分字符列表中的键值对,并可将键转换为适当的类型(https://code.kx.com/q/ref/file-text/#key-value-pairs)。权衡是0:
将转换为列表,因此我们需要将其缩减为原子,然后才能将uj
记录放入表中,而使用vs
,我们必须自己进行转换: