append!

语法

append!(obj, newData)

别名:push!

参数

obj 必须是本地变量:向量、元组、矩阵、表或集合。

newData 可以是标量、向量、元组、表或集合。

  • 如果 obj 是向量,则 newData 必须是标量、向量、或元素类型与 obj 中元素类型一致的元组。结果是比 obj 更长的向量。

  • 如果 obj 是元组,则 newData 必须是标量、向量或元组。若 newData 为向量,则作为整体追加到元组;若 newData 为元组,当系统参数 appendTupleAsAWhole 为 true 时,作为整体追加,为 false 时,将 newData 的每一个元素依次追加。

  • 如果 obj 是矩阵,则 newData 必须是长度为 obj 行数倍数的向量。结果是新的矩阵,行数和 obj 相同,具有更多的列数。

  • 如果 obj 是表,则 newData 必须是一个列数和 obj 相同的表。结果是和 obj 具有相同列数和列名的表,但行数比 obj 多。

  • 如果 newDataobj 的数据类型不同,append! 函数会尝试将 newData 转换为 obj 的数据类型。如果无法转换,将返回一个错误信息。

详情

newData 中的数据追加到 obj。在 DolphinDB 中,函数中的感叹号(!)表示直接修改数据本身(就地操作)。

请注意:

  1. 该函数不会检查两表中各列列名与顺序,只要两表中对应位置的列的数据类型一致,即可执行。如果两表中各列顺序有差别,该操作不会自动对齐各列。所以,对数据表进行 append! 操作时,请检查两表中各列列名与顺序,以免出错。绝大部分情况下两表中各列列名与顺序应当完全一致。

  2. 请注意:若数据库为 VALUE 分区,且分区列为字符串类型,则追加的分区列数据不能包含空格,“/n”, “/r”, “/t”。

例子

$ x = 1 2 3
$ x.append!(4)
$ x
[1,2,3,4]
$ append!(x, 5 6)
$ x
[1,2,3,4,5,6]
$ x.append!(7.2)
$ x
[1,2,3,4,5,6,7]
// 7.2 的数据类型从 DOUBLE 转化为 INT,所以值变为7
$ x.append!(`XOM)
Incompatible type. Expected: INT, Actual: STRING

$ x=array(INT, 0, 10)
// x 是一个空的向量
$ x
[]
$ x.append!(1)
$ x
[]
$ x=array(SYMBOL, 0, 100)
$ append!(x, `TEST)
$ x
["TEST"]

$ x=1..6$3:2
$ x

0

1

1

4

2

5

3

6

$ x.append!(7..12)
$ x

0

1

2

3

1

4

7

10

2

5

8

11

3

6

9

12

$ x=set(1 2 3 4)
$ x.append!(6)
x
$ set(6,1,2,3,4)

$ t1=table(1 2 3 as x, 4 5 6 as y)
$ t2=table(1.1 2.2 3.3 as a, 4.4 5.5 6.6 as b)
$ t1.append!(t2)
$ t1

x

y

1

4

2

5

3

6

1

4

2

6

3

7

  • 使用 append! 把数据添加到分布式表。下面的例子需要在DFS集群中执行。配置DFS集群可以参考集群配置

$ n=1000000
$ t=table(rand(`IBM`MS`APPL`AMZN,n) as symbol, rand(10.0, n) as value)
$ db = database("dfs://rangedb_tradedata", RANGE, `A`F`M`S`ZZZZ)
$ Trades = db.createPartitionedTable(t, "Trades", "symbol")

上面的脚本根据表t的结构创建了空表Trades。接着,把表t的数据追加到表Trades中。

$ Trades.append!(t)
$ select count(*) from Trades;

1000000

把其他表的数据追加到表Trades中。

$ n=500000
$ t1=table(rand(`FB`GE`MSFT,n) as symbol, rand(100.0, n) as value)
$ Trades.append!(t1)
$ select count(*) from Trades

1500000
$ x = (1,"X")
$ y = (2,"Y")
$ x.append!(y)
$ print(x)
// 配置参数appendTupleAsAWhole 为 true 时
(1,"X",(2,"Y"))
// 配置参数appendTupleAsAWhole 为 false 时
(1,"X",2,"Y")