append!
语法
append!(obj, newData)
别名:push!
详情
-
该函数不会检查两表中各列列名与顺序,只要两表中对应位置的列的数据类型一致,即可执行。如果两表中各列顺序有差别,该操作不会自动对齐各列。所以,对数据表进行
append!
操作时,请检查两表中各列列名与顺序,以免出错。绝大部分情况下两表中各列列名与顺序应当完全一致。 -
请注意:若数据库为分区,且分区列为字符串类型,则追加的分区列数据不能包含空格, “/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 多。
-
如果 newData 和 obj 的数据类型不同,
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")