latestKeyedTable

语法

latestKeyedTable(keyColumns, timeColumn, [X1], [X2], .....)

latestKeyedTable(keyColumns, timeColumn, capacity:size, colNames, colTypes)

latestKeyedTable(keyColumns, timeColumn, table)

参数

keyedTable 的基础上,增加了 timeColumn 参数。

timeColumn 字符串,表示时间列,可以为整型或时间类型。

详情

该函数用于创建键值内存表,包含一个主键。主键可由一个或多个字段组成。其相较于 keyedTable,除主键外,还包含一个时间列,用于判断是否更新记录。

向表中添加新记录时,系统自动检查新记录的主键值。如果新记录的主键值与已有记录的主键值相同,且新记录的时间戳大于等于已有记录的时间戳,则更新表中对应的记录,否则不更新。因为在写入数据时会判断时间列,对相同主键的记录进行去重,所以latestKeyedTable写入性能较keyedTable差,但查询性能不受影响。

注:
  • 不允许对主键进行修改(update, replaceColumn!)和删除(alter, dropColumns!)操作。

优化查询 latestKeyedTable 的方法和相关案例请参照函数 keyedTable。

例子

例1. 创建键值表

第一种写法:

sym=`A`B`C`D`E
id=5 4 3 2 1
val=52 64 25 48 71
timeCol = 2022.12.07T00:00:00.001+0..4
t=latestKeyedTable(`sym`id,`timeCol,sym,id,timeCol,val)
t;

输出返回:

sym id timeCol val
A 5 2022.12.07T00:00:00.001 52
B 4 2022.12.07T00:00:00.002 64
C 3 2022.12.07T00:00:00.003 25
D 2 2022.12.07T00:00:00.004 48
E 1 2022.12.07T00:00:00.005 71

第二种写法:

t=latestKeyedTable(`sym`id,1:0,`sym`id`val,[SYMBOL,INT,INT])
insert into t values(`A`B`C`D`E,5 4 3 2 1,2022.12.07T00:00:00.001+0..4,52 64 25 48 71);

第三种写法:

tmp=table(sym, id, timeCol, val)
t=latestKeyedTable(`sym`id, `timeCol, tmp);

例2. 更新键值表

插入新记录,并且新记录中的主键值与表中主键值重复,根据时间列来确定保留哪条记录:

insert into t values(`A`A`E,5 5 1, 2022.12.07T00:00:00.001 2022.12.07T00:00:00.007 2022.12.07T00:00:00.003, 44 66 28);
t;

输出返回:

sym id timeCol val
A 5 2022.12.07T00:00:00.007 66
B 4 2022.12.07T00:00:00.002 64
C 3 2022.12.07T00:00:00.003 25
D 2 2022.12.07T00:00:00.004 48
E 1 2022.12.07T00:00:00.005 71

相关函数:keyedTable, indexedTable, latestIndexedTable