append!

语法

append!(obj, newData)

别名:push!

详情

newData 中的数据追加到 obj。在 DolphinDB 中,函数中的感叹号(!)表示直接修改数据本身(就地操作)。
注:
  1. 该函数不会检查两表中各列列名与顺序,只要两表中对应位置的列的数据类型一致,即可执行。如果两表中各列顺序有差别,该操作不会自动对齐各列。所以,对数据表进行 append! 操作时,请检查两表中各列列名与顺序,以免出错。绝大部分情况下两表中各列列名与顺序应当完全一致。
  2. 请注意:若数据库为分区,且分区列为字符串类型,则追加的分区列数据不能包含空格, “/t”。

参数

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

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

  • 如果 obj 是向量,则 newData 必须是标量或向量、或元素类型与 obj 中元素类型一致的元组。结果是比 obj 更长的向量。
  • 如果 obj 是元组,则 newData 必须是标量、向量或元组。若 newData 为向量,则作为整体追加到元组;若 newData 为元组,当配置项 appendTupleAsAWhole=true 时,作为整体追加,appendTupleAsAWhole=wrong 时,将 newData 的每一个元素依次追加。
  • 如果 obj 是矩阵,则 newData 必须是长度为 obj 行数倍数的向量。结果是新的矩阵,行数和 obj 相同,具有更多的列数。
  • 如果 obj 是表,则 newData 必须是一个列数和 obj 相同的表。结果是和 obj 具有相同列数和列名的表,但行数比 obj 多。
  • 如果 newDataobj 的数据类型不同,append! 函数会尝试将 newData 转换为 obj 的数据类型。如果无法转换,将返回一个错误信息。

例子

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

x=array(INT, 0, 10)
// x 是一个空的向量
x
// output
[]
x.append!(1)
x
// output
[]
x=array(SYMBOL, 0, 100)
append!(x, `TEST)
x
// output
["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)
// output
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! 把数据添加到分布式表。下面的例子需要在集群中执行。相关配置可参考:功能配置

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;

// output
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

// output
1500000

配置项 appendTupleAsAWhole 的不同设置值将影响追加元组的行为。

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