【发布时间】:2022-01-09 17:17:22
【问题描述】:
我正在尝试将新的内存表导入分布式表。我的目的是如果一个值已经存在就更新记录,如果它不存在就写入它。我可以用什么来实现它?
【问题讨论】:
标签: in-memory-database dolphindb
我正在尝试将新的内存表导入分布式表。我的目的是如果一个值已经存在就更新记录,如果它不存在就写入它。我可以用什么来实现它?
【问题讨论】:
标签: in-memory-database dolphindb
这可以使用函数 upsert 来完成!步骤说明如下:
首先创建一个分布式数据库,并首次将数据写入数据库:
if (existsDatabase("dfs://rangedb128"))
{
dropDatabase("dfs://rangedb128")
}
db=database("dfs://rangedb128", VALUE, 0..10)
ID=0 1 2 2
x=0.1*0..3
t=table(ID, x)
pt=db.createPartitionedTable(t, `pt, `ID)
pt.append!(t)
select * from pt
结果是:
| ID | x |
|---|---|
| 0 | 0 |
| 1 | 0.1 |
| 2 | 0.2 |
| 2 | 0.3 |
第二次向数据库写入数据:
t1=table([1,5] as ID, [111,555] as x)
upsert!(pt, t1, keyColNames=`ID)
select * from pt;
更新的结果是:
| ID | x |
|---|---|
| 0 | 0 |
| 1 | 111 |
| 2 | 0.2 |
| 2 | 0.3 |
| 5 | 555 |
可以看到,更新了ID=1时的x值,加上了ID=5时的x值。
【讨论】: