update!
语法
update!(table, colNames, newValues, [filter])
参数
table 是DolphinDB中Table类型的表。它可以是分区的内存表。
colNames 是一个字符串标量/向量,表示要更新的列。
newValues 是对指定列的操作的元代码。元代码是对象或表达式,它们包含在<>中。详情请参考元编程。
filter 是表示过滤条件的元代码。
详情
就地更新表中的列。如果 colNames 中的某列不存在,将会创建新列。如果指定了过滤条件,只有符合过滤条件的记录行会被更新。
如果table是分区表并且启用了并行处理功能(即配置参数 localExcutors > 0),那么该操作是并行操作。
例子
$ n=20000000
$ workDir = "C:/DolphinDB/Data"
$ if(!exists(workDir)) mkdir(workDir)
$ trades=table(rand(`IBM`MSFT`GM`C`YHOO`GOOG,n) as sym, 2000.01.01+rand(365,n) as date, 10.0+rand(2.0,n) as price, rand(1000,n) as qty)
$ trades.saveText(workDir + "/trades.txt");
$ trades = ploadText(workDir + "/trades.txt")
$ select top 10 * from trades;
sym |
date |
price |
qty |
---|---|---|---|
MSFT |
2000.10.09 |
10.123936 |
569 |
IBM |
2000.09.22 |
10.825785 |
834 |
MSFT |
2000.09.13 |
10.467937 |
418 |
IBM |
2000.08.06 |
10.159152 |
252 |
IBM |
2000.09.01 |
10.614444 |
400 |
MSFT |
2000.05.03 |
10.40847 |
253 |
MSFT |
2000.02.20 |
11.470027 |
431 |
YHOO |
2000.11.09 |
11.570013 |
518 |
GOOG |
2000.03.02 |
10.206973 |
630 |
C |
2000.07.09 |
10.477621 |
287 |
$ trades.update!(`qty, <qty+10>)
$ select top 10 * from trades;
sym |
date |
price |
qty |
---|---|---|---|
MSFT |
2000.10.09 |
10.123936 |
579 |
IBM |
2000.09.22 |
10.825785 |
844 |
MSFT |
2000.09.13 |
10.467937 |
428 |
IBM |
2000.08.06 |
10.159152 |
262 |
IBM |
2000.09.01 |
10.614444 |
410 |
MSFT |
2000.05.03 |
10.40847 |
263 |
MSFT |
2000.02.20 |
11.470027 |
441 |
YHOO |
2000.11.09 |
11.570013 |
528 |
GOOG |
2000.03.02 |
10.206973 |
640 |
C |
2000.07.09 |
10.477621 |
297 |
$ trades.update!(`qty`price, <[qty*2, price/2]>)
$ select top 10 * from trades;
sym |
date |
price |
qty |
---|---|---|---|
MSFT |
2000.10.09 |
5.061968 |
1158 |
IBM |
2000.09.22 |
5.412893 |
1688 |
MSFT |
2000.09.13 |
5.233969 |
856 |
IBM |
2000.08.06 |
5.079576 |
524 |
IBM |
2000.09.01 |
5.307222 |
820 |
MSFT |
2000.05.03 |
5.204235 |
526 |
MSFT |
2000.02.20 |
5.735014 |
882 |
YHOO |
2000.11.09 |
5.785007 |
1056 |
GOOG |
2000.03.02 |
5.103487 |
1280 |
C |
2000.07.09 |
5.238811 |
594 |
$ trades.update!(`qty`price, <[qty*2, price/2]>, <(sym in `IBM`MSFT`GM`GOOG) and date>=2000.07.01>)
$ select top 10 * from trades;
sym |
date |
price |
qty |
---|---|---|---|
MSFT |
2000.10.09 |
2.530984 |
2316 |
IBM |
2000.09.22 |
2.706446 |
3376 |
MSFT |
2000.09.13 |
2.616984 |
1712 |
IBM |
2000.08.06 |
2.539788 |
1048 |
IBM |
2000.09.01 |
2.653611 |
1640 |
MSFT |
2000.05.03 |
5.204235 |
526 |
MSFT |
2000.02.20 |
5.735014 |
882 |
YHOO |
2000.11.09 |
5.785007 |
1056 |
GOOG |
2000.03.02 |
5.103487 |
1280 |
C |
2000.07.09 |
5.238811 |
594 |