2.00.12
2.00.12.1
缺陷修复带来的系统影响
管理员用户调用 shell
函数的权限发生了变化:
-
之前版本,允许管理员用户调用。
-
当前版本,默认不允许任何用户调用。可通过设置配置参数 enableShellFunction=true ,允许管理员用户调用。
2.00.12
涉及保持一致性或兼容行业惯例的修改
修改浮点数转换为 DECIMAL 类型的行为:
-
以前版本,以截断的方式舍入。
-
当前版本,以四舍五入的方式舍入。
decimal128(0.000009,5)
// 以前版本,output:0.00000
// 当前版本,output:0.00001
缺陷修复带来的系统影响
- 当分区表参与 asof join 时,如果连接列数大于 1,且前 n-1 列连接列没有同时覆盖参与 asof join 的分区表的所有分区列:
- 以前版本,可以正常执行。
-
当前版本,禁止执行,并抛出异常。
// 创建分区表 dfs://aj_test/pt1 和 dfs://aj_test/pt2 并写入数据 if(existsDatabase("dfs://aj_test")) dropDatabase("dfs://aj_test") db=database("dfs://aj_test", VALUE, 2023.01M..2024.01M, engine='TSDB') sym=take(`a`b, 20) date=2023.01.01 + (1..20) * 5 value= rand(10.0, 20) t1 = table(sym, date, value) sym=take(`a`b, 20) date=2023.01.02 + (1..20) * 5 price= rand(10.0, 20) t2 = table(sym, date, price) pt1 = db.createPartitionedTable(t1, "pt1", `date, sortColumns=`sym`date).append!(t1) pt2 = db.createPartitionedTable(t2, "pt2", `date, sortColumns=`sym`date).append!(t2) // asof join,连接列为 sym,date,前 n-1 列为 sym,没有覆盖分区列 date select * from aj(pt1, pt2, `sym`date) // 以前版本,得出结果。 // 当前版本,抛出异常:In asof join (aj), if the left or right table is a partitioned table, the matching columns except the last one must include all partitioning columns.
- 当聚合函数和向量函数接收列数为 0 的矩阵作为参数时:
-
以前版本,不会报错;
-
当前版本,抛出异常。
input=matrix(INT,1,0) valueChanged(input) // 以前版本,不会报错 // 当前版本,抛出异常:The column number of matrix must be greater than 0.
-
- 函数
at(func, arg)
在 arg 是一个元组时的行为改变:-
以前版本,如果 func 可以只接收一个参数,会将元组整体作为唯一 参数传入;
-
当前版本,会将元组的每一个元素作为一个参数传入 func。
def myFunc(x, y=10){ return x+y } at(myFunc, (1,2)) // 以前版本,output:(11,12) // 当前版本,output:3
-
在当前版本中,若需要将元组整体作为唯一 参数,必须将该元组作为另一个元组的唯一元素,然后将这个包含唯一元素的元组作为参数传递。例如:
def myFunc(x, y=10){ return x+y } at(myFunc, [(1,2)]) // output: (11,12)
-
- SQL 查询中,如果谓词 IN 后涉及分布式表的列:
-
以前版本,表连接时可直接访问该列
-
当前版本,所有情况下均不可直接访问该列,必须通过 SQL 查询的方式
// 创建两个分布式表 if(existsDatabase("dfs://in_test")){ dropDatabase("dfs://in_test") } db=database("dfs://in_test", VALUE, 1..10,,'TSDB') t1=table([1 ,1, 2 ,2] as id, "A"+string(1..4) as sym, rand(10.0,4) as val) t2=table([1 ,1, 2 ,3] as uid, "A"+string(1..4) as sym, rand(10.0,4) as val) pt1=db.createPartitionedTable(t1, `pt1,`id,,`sym).append!(t1) pt2=db.createPartitionedTable(t2, `pt2,`uid,,`sym).append!(t2) // 查询 select * from pt1 left join pt2 on pt1.id ==pt2.uid where pt1.id in (case when pt1.sym="A1" then 1 end) // 以前版本,正常执行并返回结果 // 当前版本,报错:The '[not] in' predicate cannot be followed by columns from the partitioned table. Please use a subquery instead. // 当前版本需通过以下方式执行 select * from pt1 left join pt2 on pt1.id ==pt2.uid where pt1.id in (select case when sym="A1" then 1 end from pt1)
-
milastNot
,mifirstNot
,mimax
,mimin
,mfirstNot
,mlastNot
,mifirstNot
,milastNot
,mimaxLast
,miminLast
函数中,当 X 是索引序列或者索引矩阵时的行为发生改变:- 当索引包含空值时,它们在以前版本上可以正常执行,在当前版本上执行报错。
data = indexedSeries(NULL 2014.01.12 2014.01.13 2014.01.14 2014.01.15 2014.01.16, 1..6) milastNot(data, 4) //以前版本,返回结果: label col1 2014.01.12 2014.01.13 2014.01.14 3 2014.01.15 3 2014.01.16 3 //当前版本报错:The row index of the matrix can't contain null if window is a time offset.
- 以前版本窗口元素选取方式和普通向量/矩阵相同,即按行选取,这不符合索引序列/矩阵的窗口选取规则,即按时间选取。当前版本,修正了这个错误。
data = indexedSeries(2014.01.11 2014.01.12 2014.01.13 2014.01.14 2014.01.15 2014.01.16, 1 NULL 3 NULL 4 5) milastNot(data, 4) //以前版本,返回结果: label col1 2014.01.11 2014.01.12 2014.01.13 2014.01.14 2 2014.01.15 3 2014.01.16 3 //当前版本,返回结果: label col1 2014.01.11 0 2014.01.12 0 2014.01.13 2 2014.01.14 2 2014.01.15 3 2014.01.16 3
- 当索引包含空值时,它们在以前版本上可以正常执行,在当前版本上执行报错。