如何将嵌套列表元素映射到相应的 id 创建 uid 表列?

问题描述 投票:0回答:1

两个变量:

q) indexList
,1452750
,966036
,1125386
,1450294
,1450293
,1452030
,1570712
421818 421840 421897 421988 422026 422059 422084
851199 851271
695902 695928
,933185
679878 679882 679886 679912
,1200606
,548797
,1057031
,751900
508978 509033 509050 509055 509060 509066 509116 509135 509140 509170 509183
,562289
,553980
1199177 1199178
q) uid
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 3..

我正在尝试将每个索引的

uid
添加到表中名为
uid
的新列中。

因此

uid[0]
应分配给
indexList[0]
等等。

我不确定在处理嵌套列表时最好的方法是什么,因为所有

421818 421840 421897 421988 422026 422059 422084
都需要相同的
uid
例如
8

操作嵌套列表数据的最佳方法是什么 - 将其从当前形式转换为新的表列?

kdb
1个回答
0
投票

q 用于创建的代码

indexList

q)indexList:(enlist 1452750;enlist 966036;enlist 1125386;enlist 1450294;enlist 1450293;enlist 1452030;enlist 1570712;421818 421840 421897 421988 422026 422059 422084;851199 851271;695902 695928;enlist 933185;679878 679882 679886 679912;enlist 1200606;enlist 548797;enlist 1057031;enlist 751900;508978 509033 509050 509055 509060 509066 509116 509135 509140 509170 509183;enlist 562289;enlist 553980;1199177 1199178)

注意

uid
修剪为
indexList
的长度,因为问题建议它们的长度应该匹配。

q)uid:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

创建一个示例表并创建一个

uid
空列:

q)tab:([] a:til 2000000)
q)update uid:0N from `tab

在我们需要的索引处插入uid:

q)tab[`uid]:@[tab`uid;raze indexList;:;raze (count each indexList)#'uid]

查看输出中填充的记录:

q)select from tab where i in raze indexList
a       uid
-----------
421818  8
421840  8
421897  8
421988  8
422026  8
422059  8
422084  8
508978  17
509033  17
509050  17
509055  17
509060  17
509066  17
509116  17
© www.soinside.com 2019 - 2024. All rights reserved.