KDB-大型数据集上的解组或清除故障排除?

KDB-大型数据集上的解组或清除故障排除?,kdb,Kdb,我正在使用KDB获取一组公式,并生成每月数据的时间数据,每个公式最多可生成1200个月。我正在扩展我的代码,并在更大的数据集上运行它,并遇到排名错误,我有时间进行故障排除 我已经将我的表分成了几列,其中一列包含不同长度的列表 t: select id, seg, prod, fcastMonths: (count each fcast), fcast from t; //I'd like to include more cols whereCon: enlist (>;`fcastMo

我正在使用KDB获取一组公式,并生成每月数据的时间数据,每个公式最多可生成1200个月。我正在扩展我的代码,并在更大的数据集上运行它,并遇到排名错误,我有时间进行故障排除

我已经将我的表分成了几列,其中一列包含不同长度的列表

t: select id, seg, prod, fcastMonths: (count each fcast), fcast from t;  //I'd like to include more cols

whereCon: enlist (>;`fcastMonths;0);
t:?[t;whereCon;0b;()];
t2: select [3200] from t;  // limit to the first 3200 rows (out of upwards to potentially 100,000 rows)

meta t2;
c         | t f a
----------| -----
id        | s
seg       | i
prod      | s
listLength| j
fcast     | F


t2;   // sample of table  - fcast list can vary based on 
id  seg     prod    fcastMonths  fcast                                                                                                                                                                                                                                                              ..
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------..      
AAA 1       YYY     235        238.3821 235.1754 232.0119 228.8908 225.8118 222.7742 219.7775 216.821 213.9044 211.0269 208.1882 205.3877 202.6248 199.8991 197.2101 194.5572 191.94 189.3581 186.8108 184.2979 181.8187 179.3729 176.96 174.5795 172.2311 169.9142 167.6286 165.3736 163.149 160...      
BBB 1       XXX     26         222.6884 218.1894 213.8686 209.7156 205.7208 201.8753 198.1709 194.6001 191.1556 187.831 184.62 181.5169 178.5164 175.6135 172.8035 170.082 167.4449 164.8883 162.4086 160.0023 157.6663 155.3976 153.1932 151.0505 148.9668 146.9399                              ..      
BBB 2       XXX     168        145.9494 143.9861 142.0492 140.1383 138.2532 136.3934 134.5587 132.7486 130.9629 129.2011 127.4631 125.7485 124.057 122.3881 120.7418 119.1176 117.5152 115.9344 114.3749 112.8363 111.3184 109.821 108.3437 106.8862 105.4484 104.0299 102.6305 101.2499 99.88793 ..      
CCC 1       XXX     588        1e-005 1e-005 1e-005 1e-005 1e-005 1e-005 1e-005 1e-005 1e-005 1e-005 1e-005 1e-005 1e-005 1e-005 1e-005 1e-005 1e-005 1e-005 1e-005 1e-005 1e-005 1e-005 1e-005 1e-005 1e-005 1e-005 1e-005 1e-005 1e-005 1e-005 1e-005 1e-005 1e-005 1e-005 1e-005 1e-005 1e-005 ..      
DDD 1       ZZZ     440        144.6268 143.883 143.143 142.4068 141.6744 140.9458 140.2209 139.4997 138.7823 138.0685 137.3584 136.652 135.9492 135.25 134.5544 133.8624 133.174 132.489 131.8076 131.1298 130.4554 129.7844 129.1169 128.4529 127.7923 127.135 126.4812 125.8307 125.1835 124.53..      
EEE 1       YYY     519        273.5174 271.9898 270.4707 268.9601 267.458 265.9642 264.4788 263.0016 261.5328 260.0721 258.6196 257.1751 255.7388 254.3105 252.8901 251.4777 250.0732 248.6765 247.2877 245.9065 244.5331 243.1674 241.8093 240.4588 239.1158 237.7803 236.4523 235.1317 233.8184..      
FFF 1       XXX     397        214.5439 211.6579 208.8107 206.0018 203.2306 200.4968 197.7997 195.1389 192.5139 189.9242 187.3694 184.8489 182.3623 179.9092 177.4891 175.1015 172.746 170.4223 168.1298 165.8681 163.6368 161.4356 159.264 157.1216 155.008 152.9228 150.8657 148.8363 146.8341 1..      
GGG 1       XXX     373        199.3068 197.9267 196.5562 195.1951 193.8435 192.5013 191.1683 189.8446 188.53 187.2246 185.9282 184.6407 183.3622 182.0925 180.8317 179.5795 178.336 177.1012 175.8749 174.657 173.4476 172.2466 171.0539 169.8695 168.6932 167.5251 166.3651 165.2132 164.0692 16..      
HHH 1       XXX     384        28.87306 28.62066 28.37047 28.12247 27.87663 27.63295 27.39139 27.15195 26.91459 26.67932 26.4461 26.21492 25.98576 25.7586 25.53343 25.31022 25.08897 24.86965 24.65225 24.43675 24.22313 24.01139 23.80149 23.59342 23.38718 23.18274 22.98008 22.7792 22.58007 2..      
III 1       XXX     66         103.9212 101.8217 99.80533 97.86726 96.00302 94.20847 92.47977 90.81337 89.20595 87.65445 86.15599 84.70789 83.30767 81.95298 80.64164 79.3716 78.14094 76.94786 75.79067 74.66775 73.57763 72.51887 71.49016 70.49021 69.51785 68.57195 67.65144 66.75532 65.88263..      
III 2       XXX     124        44.20929 43.82283 43.43974 43.06001 42.6836 42.31047 41.94061 41.57398 41.21056 40.85031 40.49322 40.13924 39.78836 39.44054 39.09577 38.75401 38.41524 38.07943 37.74655 37.41658 37.0895 36.76528 36.44389 36.12532 35.80952 35.49649 35.18619 34.87861 34.57371 ..      
JJJ 1       YYY     38         24.83147 24.49744 24.1679 23.8428 23.52206 23.20565 22.89349 22.58552 22.2817 21.98197 21.68627 21.39455 21.10675 20.82282 20.54272 20.26638 19.99375 19.7248 19.45946 19.19769 18.93945 18.68468 18.43333 18.18537 17.94074 17.6994 17.46131 17.22642 16.99469 16...      
KKK 1       YYY     1003       1127.341 1122.039 1116.762 1111.509 1106.282 1101.079 1095.9 1090.746 1085.616 1080.511 1075.429 1070.371 1065.337 1060.327 1055.34 1050.376 1045.436 1040.52 1035.626 1030.755 1025.907 1021.083 1016.28 1011.501 1006.743 1002.009 997.296 992.6056 987.9373 983...      
LLL 1       XXX     57         118.9517 116.9033 114.9242 113.011 111.1605 109.3696 107.6354 105.9554 104.327 102.748 101.216 99.72898 98.28505 96.88234 95.51909 94.19367 92.90453 91.6502 90.42928 89.24046 88.0825 86.95419 85.85442 84.78213 83.73628 82.71592 81.72013 80.74802 79.79877 78.8..      
LLL 2       XXX     158        59.77378 59.25126 58.73331 58.21988 57.71095 57.20646 56.70638 56.21068 55.71931 55.23223 54.74941 54.27081 53.7964 53.32613 52.85998 52.3979 51.93985 51.48582 51.03575 50.58961 50.14738 49.70901 49.27447 48.84373 48.41676 47.99352 47.57398 47.15811 46.74587 ..      
MMM 1       YYY     216        99.56228 98.69195 97.82922 96.97403 96.12632 95.28603 94.45307 93.6274 92.80895 91.99765 91.19344 90.39626 89.60605 88.82275 88.0463 87.27663 86.51369 85.75742 85.00776 84.26466 83.52805 82.79788 82.07409 81.35..  
当解组成功时,生成的表是理想的,为每个id、seg和prod显示一列。不需要fcastMonths,但提供fcastMonths是为了演示fcast的不同长度

t2: select [3200] from t;  // limit to the first 3200 rows (out of upwards to potentially 100,000 rows)
t2: ungroup t2;     // this works well on smaller data sets but creates rank error with large data sets
t2   

id        seg    prod  fcastMonths   fcast   
---------------------------------------------
AAA       1       YYY     235        238.3821
AAA       1       YYY     235        235.1754
AAA       1       YYY     235        232.0119
AAA       1       YYY     235        228.8908
AAA       1       YYY     235        225.8118
AAA       1       YYY     235        222.7742
AAA       1       YYY     235        219.7775
AAA       1       YYY     235        216.821
AAA       1       YYY     235        213.9044
AAA       1       YYY     235        211.0269
AAA       1       YYY     235        208.1882
AAA       1       YYY     235        205.3877
AAA       1       YYY     235        202.6248
AAA       1       YYY     235        199.8991
AAA       1       YYY     235        197.21  
表t的计数长度可达~100000行,未分组每行最多可达~1200个月,每月数据可能多达数亿行

q)t: ungroup t;
'rank
  [52] t: ungroup t;  // errors out when using large subsets of data or the entire table.

提前感谢您提出的任何想法或想法

如果表中的某一列有长度可变的条目,kdb可以将其解组


以下两种情况之一导致了
“rank
错误,要么是表
t
中存在另一个嵌套列,要么是
fcast
项中有一个具有长度如果表中的一列具有长度可变的项,kdb可以将其解组


以下两种情况之一导致了
'rank
错误,要么是表
t
中存在另一个嵌套列,要么是其中一个
fcast
条目具有长度。因此,我在
ungroup
网站上读到了关于长度的相同内容。你知道为什么这在我的前几千行上有效吗?每个
fcast
的长度都是不同的(因此我认为通过创建和检查列
fcastnumbers
),我是否遗漏了应该检查的其他内容?我还需要在
t
中添加其他几列以进行分组(即日期和元数据),但我会将其连接回一个更大的表中。我今晚测试了它,效果非常好。我真的很感激这个解决方案!嗨,杰森。在这个示例中,如果我没有弄错的话,您共享的表只是原始表的一行。在本例中,由于它是唯一一行,
fcast
条目与表的其余部分具有相同的长度。一旦添加了另一行,该行具有不同长度的
fcast
条目,它们将不再统一,您将无法
取消分组
。再次感谢Cathal。在上表t2的示例中,每一行代表一个不同的
id
,具有不同的
fcast
长度,因此AAA的
fcast
长度为235,而BBB的未分组长度为26+168(因为它有两行)。我想我仍然不明白,如果这些行中的每一行长度不同,为什么取消分组会起作用。我的意思是,在某种程度上,它必须是相同的长度,这样它才能工作。再次感谢你,这非常有帮助!抱歉,杰森,是的,你是对的。我把t2弄糊涂了,因为它只是桌子上的一排<只要
fcast
是唯一具有可变长度条目的列,并且所有长度都大于1,则code>ungroup将起作用。你能确认整张桌子都是这样吗?谢谢Cathal。因此,我在
ungroup
网站上读到了关于长度的相同内容。你知道为什么这在我的前几千行上有效吗?每个
fcast
的长度都是不同的(因此我认为通过创建和检查列
fcastnumbers
),我是否遗漏了应该检查的其他内容?我还需要在
t
中添加其他几列以进行分组(即日期和元数据),但我会将其连接回一个更大的表中。我今晚测试了它,效果非常好。我真的很感激这个解决方案!嗨,杰森。在这个示例中,如果我没有弄错的话,您共享的表只是原始表的一行。在本例中,由于它是唯一一行,
fcast
条目与表的其余部分具有相同的长度。一旦添加了另一行,该行具有不同长度的
fcast
条目,它们将不再统一,您将无法
取消分组
。再次感谢Cathal。在上表t2的示例中,每一行代表一个不同的
id
,具有不同的
fcast
长度,因此AAA的
fcast
长度为235,而BBB的未分组长度为26+168(因为它有两行)。我想我仍然不明白,如果这些行中的每一行长度不同,为什么取消分组会起作用。我的意思是,在某种程度上,它必须是相同的长度,这样它才能工作。再次感谢你,这非常有帮助!抱歉,杰森,是的,你是对的。我把t2弄糊涂了,因为它只是桌子上的一排<只要
fcast
是唯一具有可变长度条目的列,并且所有长度都大于1,则code>ungroup将起作用。你能确认整张桌子都是这样吗?
q)t:([]id:`AAA`BBB`BBB;seg:1 1 2;prod:`YYY`XXX`XXX;fcastMonths:235 26 186;fcast:(238.3821 235.1754 232.0119 228.8908 225.8118;222.6884 218.1894 213.8686;145.9494))
q)t
id  seg prod fcastMonths fcast
---------------------------------------------------------------------
AAA 1   YYY  235         238.3821 235.1754 232.0119 228.8908 225.8118
BBB 1   XXX  26          222.6884 218.1894 213.8686
BBB 2   XXX  186         145.9494
q)![t;();0b;{x!(enlist({(count each x)#'y};`fcast)),/:x}cols t]
id                   seg       prod                 fcastMonths         fcast
--------------------------------------------------------------------------------------------------------------------
`AAA`AAA`AAA`AAA`AAA 1 1 1 1 1 `YYY`YYY`YYY`YYY`YYY 235 235 235 235 235 238.3821 235.1754 232.0119 228.8908 225.8118
`BBB`BBB`BBB         1 1 1     `XXX`XXX`XXX         26 26 26            222.6884 218.1894 213.8686
`BBB`BBB             2 2       `XXX`XXX             186 186             145.9494
q)ungroup ![t;();0b;{x!(enlist({(count each x)#'y};`fcast)),/:x}cols t]
id  seg prod fcastMonths fcast
---------------------------------
AAA 1   YYY  235         238.3821
AAA 1   YYY  235         235.1754
AAA 1   YYY  235         232.0119
AAA 1   YYY  235         228.8908
AAA 1   YYY  235         225.8118
BBB 1   XXX  26          222.6884
BBB 1   XXX  26          218.1894
BBB 1   XXX  26          213.8686
BBB 2   XXX  186         145.9494