latestKeyedStreamTable

语法

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

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

参数

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

timeColumn 字符串标量或长度为 2 的向量,分别用于指定 1 个或 2 个时间列。当仅指定 1 个时间列时,该列可以为整型或时间类型;当指定 2 个时间列时,第 1 列必须是 DATE 类型,第 2 列则是 TIME, SECOND 或 NANOTIME 类型。通过这两列,可以共同确定唯一的时间值。

详情

创建一个键值流数据表,该表包含一个主键,且该主键不允许重复值。主键可由一个或多个字段组成。其相较于 keyedStreamTable,除主键外,还包含一个时间列,用于判断是否添加记录。

向表中添加新记录时,系统会自动检查新记录的主键值:

  • 如果新记录的主键值与内存中已有记录的主键值相同,且新记录的时间戳大于已有记录的时间戳,则将新记录添加至表中,否则直接舍弃。

  • 一次性批量插入新记录时,若有多条记录具有相同的主键值,且该主键值与已有记录的主键值不同,只有时间戳最大的记录可以插入成功。

例子

例1. 主键为 1 个字段

第一种写法:

id = `A`B`C`D`E
x = 1 2 3 4 5
timeCol = 2024.09.10T00:00:00.001+0..4
t1 = latestKeyedStreamTable(`id, `timeCol, id, x, timeCol)
t1;

id

x

timeCol

A 1 2024.09.10T00:00:00.001
B 2 2024.09.10T00:00:00.002
C 3 2024.09.10T00:00:00.003
D 4 2024.09.10T00:00:00.004
E 5 2024.09.10T00:00:00.005

第二种写法:

t2=latestKeyedStreamTable(`id, `timeCol, 100:0, `id`x`timeCol, [INT,INT,TIMESTAMP])
insert into t2 values(1 2 3, 10 20 30, [2024.09.10T00:00:00.001,
2024.09.10T00:00:00.002, 2024.09.10T00:00:00.003])

t2

id

x

timeCol

1 10 2024.09.10T00:00:00.001
2 20 2024.09.10T00:00:00.002
3 30 2024.09.10T00:00:00.003

向表 t1 中插入新记录,并且新记录中的主键值与表中主键值相同时,将根据 timeColumn 来确定是否插入新记录:

insert into t1 values(`D`E`F, 6 7 8, [2024.09.10T00:00:00.005,
 2024.09.10T00:00:00.005, 2024.09.10T00:00:00.005])
t1

id

x

timeCol

A 1 2024.09.10T00:00:00.001
B 2 2024.09.10T00:00:00.002
C 3 2024.09.10T00:00:00.003
D 4 2024.09.10T00:00:00.004
E 5 2024.09.10T00:00:00.005
D 6 2024.09.10T00:00:00.005
F 8 2024.09.10T00:00:00.005

可以看到,新插入了 id=`D 和 id=`F 的记录,而 id=`E 的记录被丢弃了。新增的 id 为 D 的记录因为时间戳大于已存在的 id 为 D 的记录,所以插入成功;id 为 E 的记录因为时间戳等于已有的 id 为 E 的记录,所以被舍弃;因为已有记录中没有 id 为 F 的记录,所以它被成功插入。

例2. 主键为多个字段

t3 = latestKeyedStreamTable(`id`x, `timeCol, id, x, timeCol)
insert into t3 values(`D`E, 4 5, [2024.09.10T00:00:00.004, 2024.09.10T00:00:00.005])
insert into t3 values(`D`F, 6 7, [2024.09.10T00:00:00.004, 2024.09.10T00:00:00.005])
t3

id

x

timeCol

A 1 2024.09.10T00:00:00.001
B 2 2024.09.10T00:00:00.002
C 3 2024.09.10T00:00:00.003
D 4 2024.09.10T00:00:00.004
E 5 2024.09.10T00:00:00.005
D 6 2024.09.10T00:00:00.004
F 7 2024.09.10T00:00:00.005

例3. 时间列指定为两列

id = `A`B`C`D`E
dateCol = take(2024.09.10, 5)
timeCol = 00:00:00.001+0..4
t4 = latestKeyedStreamTable(`id, `dateCol`timeCol, id, x, dateCol, timeCol)
t4

id

x

dateCol

timeCol

A 1 2024.09.10 00:00:00.001
B 2 2024.09.10 00:00:00.002
C 3 2024.09.10 00:00:00.003
D 4 2024.09.10 00:00:00.004
E 5 2024.09.10 00:00:00.005

向表 t4 中插入新记录,并且新记录中的主键值与表中主键值相同时,将根据concatDateTime(dateCol, timeCol) 的值来确定是否插入新记录:

insert into t4 values(`D`E, 4 5, [2024.09.10,  2024.09.11], [00:00:00.004, 00:00:00.005]);
t4

id

x

dateCol

timeCol

A 1 2024.09.10 00:00:00.001
B 2 2024.09.10 00:00:00.002
C 3 2024.09.10 00:00:00.003
D 4 2024.09.10 00:00:00.004
E 5 2024.09.10 00:00:00.005
E 5 2024.09.11 00:00:00.005