tableUpsert
Syntax
tableUpsert(obj, newData, [ignoreNull=false], [keyColNames],
[sortColumns])
Arguments
obj is a keyed table, indexed table, or a DFS table.
newData is an in-memory table.
ignoreNull (optional) is a Boolean value. If set to true, for the NULL values in newData, the corresponding elements in obj are not updated. The default value is false.
keyColNames (optional) is a STRING scalar/vector. When obj is a DFS table, keyColNames are considered as the key columns.
sortColumns (optional) is a STRING scalar or vector. The updated partitions will be sorted on sortColumns (only within each partition, not across partitions).
Note:
-
sortColumns is supported in
upsert!
only with the OLAP engine. -
To specify sortColumns, obj must be a DFS table.
-
When obj is an empty table, setting sortColumns has no effect. That is, the system will not sort the inserted data.
Details
Insert rows into a table if the values with the key do not already exist, or update them if they do.
Return value: A LONG pair. The first element represents the number of inserted records, and the second represents the number of updated records.
The usage of tableUpsert
and upsert!
is consistent,
with the difference being that tableUpsert
returns the number of
involved records, while upsert!
performs an in-place modification,
which is often used to chain operations.
Examples
Use tableUpsert
on a keyed table:
sym=`A`B`C
date=take(2021.01.06, 3)
x=1 2 3
y=5 6 7
t=keyedTable(`sym`date, sym, date, x, y)
newData = table(`A`B`C`D as sym1, take(2021.01.06, 4) as date1, NULL NULL 300 400 as x1, NULL 600 700 800 as y1);
tableUpsert(t, newData, ignoreNull=true)
// output
1:2
Used tableUpsert
on an indexed table:
sym=`A`B`C
date=take(2021.01.06, 3)
x=1 2 3
y=5 6 7
t=indexedTable(`sym`date, sym, date, x, y)
newData = table(`A`B`C`D as sym1, take(2021.01.06, 4) as date1, NULL NULL 300 400 as x1, NULL 600 700 800 as y1);
tableUpsert(t, newData, ignoreNull=true)
// output
1:2
Use tableUpsert
on a DFS table:
ID=0 1 2 2
x=0.1*0..3
t=table(ID, x)
db=database("dfs://rangedb128", VALUE, 0..10)
pt=db.createPartitionedTable(t, `pt, `ID)
pt.append!(t)
t1=table(1 as ID, 111 as x)
tableUpsert(pt, t1, keyColNames=`ID)
// output
0:1