append!
语法
append!(obj, newData)
别名:push!
参数
obj 必须是本地变量:向量、矩阵、表或集合。
newData 可以是标量、向量、表或集合。
如果 obj 是向量,则 newData 必须是标量或向量。结果是比 obj 更长的向量。
如果 obj 是矩阵,则 newData 必须是长度为 obj 行数倍数的向量。结果是新的矩阵,行数和 obj 相同,具有更多的列数。
如果 obj 是表,则 newData 必须是一个列数和 obj 相同的表。结果是和 obj 具有相同列数和列名的表,但行数比 obj 多。
如果 newData 和 obj 的数据类型不同,append! 函数会尝试将 newData 转换为 obj 的数据类型。如果无法转换,将返回一个错误信息。
详情
将 newData 中的数据追加到 obj。在 DolphinDB 中,函数中的感叹号(!)表示直接修改数据本身(就地操作)。
请注意:
该函数不会检查两表中各列列名与顺序,只要两表中对应位置的列的数据类型一致,即可执行。如果两表中各列顺序有差别,该操作不会自动对齐各列。所以,对数据表进行 append! 操作时,请检查两表中各列列名与顺序,以免出错。绝大部分情况下两表中各列列名与顺序应当完全一致。
请注意:若数据库为 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