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 多。
如果 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
$ x = (1,"X")
$ y = (2,"Y")
$ x.append!(y)
$ print(x)
// 配置参数appendTupleAsAWhole 为 true 时
(1,"X",(2,"Y"))
// 配置参数appendTupleAsAWhole 为 false 时
(1,"X",2,"Y")