keyedStreamTable

语法

keyedStreamTable(keyColumn, X, [X1], [X2], …..)

keyedStreamTable(keyColumn, capacity:size, colNames, colTypes)

参数

keyColumn 是一个字符串或向量,表示主键。

第一种用法中: X, X1….是向量。

第二种用法中:

capacity 是正整数,表示建表时系统为该表分配的内存(以记录数为单位)。当记录数超过 capacity 时,系统会首先会分配 capacity 1.2~2 倍的新的内存空间,然后复制数据到新的内存空间,最后释放原来的内存。对于规模较大的表,此类操作的内存占用会很高。因此,建议建表时预先分配一个合理的 capacity

size 只能是0或1。若 size=0,则建立一个空表;若 size=1,则建立一个只包含1条记录的表,其中记录的初始值取决于列的数据类型:

  • BOOL 类型默认值为 false;

  • 数值类型、时间类型、IPADDR、COMPLEX、POINT 的默认值为 0;

  • Literal, INT128 类型的默认值为 NULL。

colNames 是字符串向量,表示列名。

colTypes 是向量,表示各列的数据类型。

详情

创建键值流数据表。该表的主键不允许包含重复值。主键支持一个或多个字段。

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

  • 如果新记录的主键值与已有记录的主键值重复时,已有的记录不会被更新。

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

例子

第一种用法:

$ id=`A`B`C`D`E
$ x=1 2 3 4 5
$ t1=keyedStreamTable(`id, id, x)
$ t1;

id

x

A

1

B

2

C

3

D

4

E

5

第二种用法:

$ t2=keyedStreamTable(`id,100:0,`id`x, [INT,INT])
$ insert into t2 values(1 2 3,10 20 30);
$ t2;

id

x

1

10

2

20

3

30

往表 t2 中插入重复主键值的数据:

$ insert into t2 values(3 4 5,35 45 55)
$ t2;

id

x

1

10

2

20

3

30

4

45

5

55

可以看到,id=3的记录并没有被覆盖。

主键为多个字段:

$ t=keyedStreamTable(`sym`id,1:0,`sym`id`val,[SYMBOL,INT,DOUBLE])
$ insert into t values(`A`B`C`D`E,5 4 3 2 1,52.1 64.2 25.5 48.8 71.9);
$ insert into t values(`A`B`R`T`Y,5 8 3 2 1,152.3 164.6 125.5 148.8 171.6);
$ t;

sym

id

val

A

5

52.1

B

4

64.2

C

3

25.5

D

2

48.8

E

1

71.9

B

8

164.6

R

3

125.5

T

2

148.8

Y

1

171.6