sqlUpdate

语法

sqlUpdate(table, updates, [from], [where], [contextBy])

参数

各参数对应SQL update语句中相应部分:

update

[table_name]

set col1=X1, [col2=X2,…]

[from table_joiner(table_names)]

[where condition(s)]

[context by col_name(s)]

table 可以是内存表,亦可为分布式表。

updates 是元代码或元代码组成的元组,表示更新的操作。

from 是元代码,表示表连接操作。

where 是元代码,表示where条件。

contextBy 是元代码,表示context by子句。

详情

动态生成SQL update语句的元代码。若需执行生成的元代码,请配合使用 eval 函数。

例子

例1. 更新内存表记录

$ t1=table(`A`A`B`B as symbol, 2021.04.15 2021.04.16 2021.04.15 2021.04.16 as date, 12 13 21 22 as price)
$ t2=table(`A`A`B`B as symbol, 2021.04.15 2021.04.16 2021.04.15 2021.04.16 as date, 10 20 30 40 as volume);

$ sqlUpdate(t1, <price*2 as updatedPrice>).eval()
$ t1;

symbol

date

price

updatedPrice

A

2021.04.15

12

24

A

2021.04.16

13

26

B

2021.04.15

21

42

B

2021.04.16

22

44

$ sqlUpdate(table=t1, updates=[<price*10 as updatedPrice>,<price*20 as updatedPrice2>]).eval()
$ t1;

symbol

date

price

updatedPrice

updatedPrice2

A

2021.04.15

12

120

240

A

2021.04.16

13

130

260

B

2021.04.15

21

210

420

B

2021.04.16

22

220

440

$ sqlUpdate(table=t2, updates=<cumsum(volume) as cumVolume>, contextby=<symbol>).eval()

$ t2;

symbol

date

volume

cumVolume

A

2021.04.15

10

10

A

2021.04.16

20

30

B

2021.04.15

30

30

B

2021.04.16

40

70

$ sqlUpdate(table=t1, updates=<updatedPrice*volume as dollarVolume>, from=<lj(t1, t2, `symbol`date)>).eval()

$ t1;

symbol

date

price

updatedPrice

dollarVolume

A

2021.04.15

12

120

1200

A

2021.04.16

13

130

2600

B

2021.04.15

21

42

1260

B

2021.04.16

22

44

1760

例2. 更新分区表记录

$ if(existsDatabase("dfs://db1")){
$     dropDatabase("dfs://db1")
$ }
$ n=1000000
$ t=table(take(`A`B`C`D,n) as symbol, rand(10.0, n) as value)
$ db = database("dfs://db1", VALUE, `A`B`C`D)
$ Trades = db.createPartitionedTable(t, "Trades", "symbol")
$ Trades.append!(t)
$ x=exec sum(value) from Trades;

$ Trades=loadTable("dfs://db1", "Trades")
$ sqlUpdate(table=Trades, updates=<value+1 as value>, where=<symbol=`A>).eval()
$ y=exec sum(value) from Trades;

$ y-x;

250000