update!

Syntax

update!(table, colNames, newValues, [filter])

Arguments

table is a DolphinDB table. It can be a partitioned in-memory table.

colNames is a string scalar/vector indicating the columns to be updated.

newValues is a piece of metacode with the operations for the specified columns. Metacode is objects or expressions within “<” and “>”. For details about metacode, please refer to Metaprogramming.

filter is a piece of metacode with filterting conditions.

Details

Update columns of a table in place. If a column in colNames doesn’t exist, create a new column; otherwise update the existing column. If a filter is specified, only rows satisfying the filtering condition will be updated.

This operation is parallel if the table is a partitioned table and if the parallel processing feature is enabled (when the configuration parameter localExcutors > 0).

Examples

$ 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