2.00.11
版本下载
版本号: 2.00.11 二级兼容 2.00.10 和 1.30.22
发行日期: 2024-01-03
新功能
- 新增
fromStdJson
函数,支持将标准 JSON 文本转化为符合 DolphinDB 标准的数据。(2.00.11.6) - 新增配置项enableShellFunction,用于设置是否允许用户调用
shell
函数。默认不允许任何用户调用。(2.00.11.5) -
新增函数
sqlTuple
,用于生成一个内容为元组表达式的元代码。(2.00.11.3) - 新增时间序列序列协整性检验函数
adfuller
和coint
。(2.00.11.2) - 支持 AWS S3 的相关配置参数 s3Endpoint,用于访问 S3。(2.00.11.2)
- 新增函数
highLong
和lowLong
用于将16字节长度的数据(如 INT128, UUID, IPADDR 等)解析为高位8字节和低位8字节的长整型数据。(2.00.11.1) - 新增函数
regexFindStr
,支持查找给定字符串中满足正则表达式的子串。(2.00.11.1) - 新增配置项 enableDFSQueryLog,用于配置是否输出对 DFS 表的所有查询记录。(2.00.11.1)
- TSDB 引擎可通过参数设置软删除功能。软删除只需要读取待删除的数据并增加删除标记,而实际删除操作则会在合并时执行。相较于硬删除,软删除能够有效提升删除效率。
- 支持开窗函数又叫做分析函数,允许用户在数据集中定义一个窗口,在窗口内对数据进行聚合、排序、分析等操作,而不是对整个数据集进行操作。支持以下函数:
sum
,avg
,std
,stdp
,var
,varp
,count
,min
,max
,skew
,kurtosis
,med
,rank
,dense_rank
,percent_rank
,row_number
,cume_dist
,lead
,lag
,ntile
,first_value
,last_value
,nth_value
。 - 新增用户级别资源跟踪功能:
- 新增函数
getUserHardwareUsage
,用于采样 CPU 和内存使用量。 - 新增函数
getUserTableAccessRecords
,用于记录 SQL 访问分布式表的信息。 - 新增函数
enableResourceTracking
和disableResourceTracking
用于开启或关闭控制资源隔离。 - 新增配置项 resourceSamplingInterval, resourceSamplingMaxLogSize 和resourceSamplingLogRetentionTime,分别设置采样间隔、拆分日志文件的大小阈值和日志保留时间。
- 新增函数
- 新增配置项 jobParallelismHardLimit 和defaultJobParallelism,分别用于限制一个作业可以使用的最大工作线程数和配置用户提交作业的默认并行度。
- 新增配置项 datanodeRestartLevel,可以指定触发控制节点自动重启数据节点/计算节点的条件。
- 新增函数
setDatanodeRestartInterval
和getDatanodeRestartInterval
,分别用于动态设置控制节点自动重启计算节点/数据节点的功能和获取内存中 DatanodeRestartInterval 的值。 - 新增配置项 thirdPartyCreateUserCallback 和
thirdPartyDeleteUserCallback,用于配置一个函数视图,进而配合
createUser
和deleteUser
函数实现在创建或删除用户时进行回调。 - 新增函数
RidgeCV
,ElasticNetCV
和LassoCV
,实现对应机器学习模型的交叉验证。 - 新增函数
iminLast
/imaxLast
/miminLast
/mimaxLast
/rowIminLast
/rowImaxLast
,当有多个最值时,返回最大的 index。 - 新增函数
bondDuration
,bondDirtyPrice
,bondConvexity
分别用于计算久期、含息价格、凸性。 - 新增函数
signbit
,获取 ±0.0 的符号信息以区分 ±0.0。 - 新增函数
submitJobEx2
,其扩展了submitJobEx
函数的功能,支持传入回调函数。 - 新增函数
polyFit
和poly1d
,实现多项式拟合。 - 新增函数
cubicSpline
和cubicSplinePredict
,实现三次样条插值。 - 新增函数
kendall
,可计算 kendall 相关系数。 - 新增函数
clip
和clip!
,用来截断范围外的数据。其功能与numpy.clip
类似。 - 新增函数
tableUpsert
,其功能与upsert!
一致,但是会返回修改的行数。 - 新增函数
brentq
,用于在给定的区间内找一个函数的根(即零点)。 - 新增函数
snippet
,以字符串标量形式返回打印结果。 - 新增函数
socp
用于求解二阶锥规划问题,计算目标函数在限定条件下的最小值。 - 新增配置项 enableLocalDatabase,配置是否禁止创建磁盘数据库。
- 新增函数
getTSDBDataStat
,用于查询 TSDB 引擎中数据文件的一些统计信息。 - 新增函数
existsStreamTable
,用于判断流表是否存在。 - 新增函数
getStreamTables
,用于获取流表的信息。 - 新增函数
createRuleEngine
用于创建规则引擎(RuleEngine)。可以根据自定义的规则,校验输入并按要求输出检查结果。同时新增函数updateRule
和deleteRule
,分别用于更新或删除规则引擎中的规则。 - 新增函数
createNarrowReactiveStateEngine
支持状态引擎计算结果输出到窄表。同时新增函数addReactiveMetrics
和getReactiveMetrics
支持动态为引擎增加指标和获取引擎指标。
功能改进
parseJsonTable
函数支持传入的表中包含 BLOB 类型的列。(2.00.11.12)- 优化登录失败保护机制,即仅在登录失败的 IP 地址上锁定用户登录。(2.00.11.12)
- 优化控制节点元数据 checkpoint 机制,在元数据较大的情况下减少 checkpoint 频率。(2.00.11.12)
- 优化持久化流表的加载速度。(2.00.11.12)
- 使用函数
upsert!
更新去重策略为保留所有数据的 TSDB 库表,参数 keyColNames 允许只包含 sortColumns 的部分列。(2.00.11.11) - 增强对函数视图和模块中函数的访问权限。(2.00.11.9)
- 支持创建 STRING 类型的矩阵。(2.00.11.4)
- 在
subscribeTable
的参数 hanlder 中调用getCurrentSessionAndUser
时,将返回提交subscribeTable
时的 sessionID。(2.00.11.3) - 在
streamFilter
的参数 filter 中通过 handler 调用getCurrentSessionAndUser
时,将返回执行streamFilter
时的 sessionID。(2.00.11.3) createCrossSectionalEngine
函数若指定参数 triggeringPattern 为 dataInterval,将仅对有新数据输入的时间段进行计算并输出横截面信息。(2.00.11.3)-
makeUnifiedCall
函数的参数 args 支持输入元代码,其代码是元组表达式。(2.00.11.3) -
hex
支持将浮点型数据转换为十六进制数据显示。(2.00.11.3) - 交易日历支持将周末设置为交易日。(2.00.11.3)
-
backup
支持对冷盘数据进行备份。(2.00.11.3) - 支持通过对象方法调用的方式生成部分应用。(2.00.11.3)
- replayDS 函数的输入表支持 DECIMAL 类型数据。(2.00.11.2)
- 键值流数据表的非主键列支持数组向量。(2.00.11.2)
- lambda 函数支持 object.method(...) 的写法。(2.00.11.2)
- 数组向量和列式元组支持通过指定行和列的方式修改元素值。(2.00.11.2)
- 优化通过 makeKey 方法批量查询(select)、更新(update)和删除(delete)数据时的性能。(2.00.11.2)
- 优化 format 函数返回结果的精度。(2.00.11.2)
- JIT 不支持对
append!
进行连续的链式调用。(2.00.11.2) - 当通过
objs
函数查询共享变量的信息时,返回表中新增一个名为 “owner” 的列,用于记录共享变量的创建者。(2.00.11.1) - 以下函数的入参是 DURATION 类型时,支持交易日历:
wj
,twindow
,temporalAdd
,duration
,move
,tmove
,moving
,tmovingWindowData
和时序滑动窗口系列函数。(2.00.11.1) -
ols
函数新增 method 参数,用户可以选择使用构造系数矩阵和逆矩阵或奇异值分解来求解普通最小二乘问题。(2.00.11.1) - 优化通过
temporalAdd
函数给一个时间向量增加交易日时的计算性能。(2.00.11.1) -
each
,eachPre
,eachPost
,eachLeft
,eachRight
,cross
,reduce
,accumulate
,any
,all
,loop
,ploop
等高阶函数允许输入空对象。(2.00.11.1) -
transpose
输入为字典时,允许 value 是标量。(2.00.11.1) - 字典和元组支持 Copy On Write。(2.00.11.1)
- 脚本支持在 member(.) 运算符之前换行。(2.00.11.1)
- 为函数视图增加命名空间以防止名称冲突。对函数视图的任何操作都会同步持久化到集群中的所有节点。
- 为 job 增加权限管理的功能,仅具备相应权限的用户可以取消 job。
- 支持 module 级别的 VIEW_EXEC 权限。
- 字典的 value 支持 DECIMAL 类型。
- 函数支持指定 window=0:0,窗口边界由左表当前数据与上一条数据的时间戳决定。该功能与
createWindowJoinEngine
中 window=0:0 时的功能对齐。 schema
函数增加以下输出信息:每一列的压缩算法、数据库创建者、数据表创建者、是否启用软删除。loadPlugin
的参数 filePath 支持指定为插件名。backup
的参数 backupDir 支持设置为 S3 路径。-
rowImax
/rowImin
支持 array vector 类型输入。 transFreq
,asFreq
,resample
函数改进:- 参数 rule 设置为交易日历时,支持搭配数字。例如:“2XSHG”,表示上海证券交易所每两个交易日;
- 当 rule 的精度为天以上时,参数 label, closed 支持默认值以外的值。
moving
函数支持输入参数为矩阵。- 支持通过
updateLicense
在线更新试用 license。 -
rowAt
函数支持输入 columnar tuple 数据类型。 -
unpack
函数支持输入 BLOB 类型数据。 - 高阶函数
byRow
,byColumn
支持模式符号,分别为 :H 和 :V,模式符号可以叠用。同时支持输入为 array vector 和 columnar tuple。 -
transpose
函数支持输入为 array vector 和 columnar tuple。 -
toJson
和toStdJson
转换 BLOB 类型时支持转义字符。 - 优化了最优解函数
scs
和quadprog
的性能。 unionAll
函数输入为元组时,第一个元素支持空值。- 支持定期自动回收维度表所占内存。
-
replaceColumn!
支持同时替换内存表中的多列。 - 提升 TSDB 库表的 sortColumn 指定超过两列,且进行了 hash 降维时的查询性能。
- 针对采用值分区,且以类型为 STRING 或 SYMBOL 的列作为分区列的分布式数据表,支持分区列包含中文字符。同时新增配置项 ignoreSpecialCharacterInPartitionId 用于指定在创建分区路径时是否忽略字符串中的 ':' 和 '.'。
- 优化了
createAsofJoinEngine
函数的计算性能。 - 倍速回放支持完全按照数据到来时间的倍速进行回放。
- LookupJoinEngine 和 AsofJoinEngine 新增参数 outputElapsedMicroseconds 支持输出计算耗时。
- AsofJoinEngine、SessionWindowEngine 和 LeftSemiJoinEngine 支持 array vector 输入。
- TimeSeriesEngine 设置 updateTime = 0 时,每批输入数据都会触发窗口计算输出。
- 响应式状态引擎新增参数 keyCapacity 和 parallelism,优化了其在分组很多时的计算性能。
- 响应式状态引擎的 metrics 中的状态函数支持
for
语句。 - LookupJoin 引擎新增参数 keepDuplicates,用于左表指定是否与右表多条匹配的记录进行连接。
- 时序引擎新增参数 subWindow, 支持计算一个 window 内某一段时间内的数据。
getStreamingStat
函数支持显示所有订阅的信息。- 响应式状态引擎(ReactiveStateEngine)支持
tmsum2
和 cumTopN 系列函数。 -
createWindowJoinEngine
新增参数 closed,用于确定窗口边界的开闭情况。 createStreamDispatchEngine
的 dispatchType 参数新增选项:"saltedHash",可以进行加盐处理,防止多层分发的时候因为同余关系导致部分输出表没有数据。- 流计算引擎支持计算 DECIMAL 类型数据。
update
和delete
语句的操作将会记录到 jobLog 中。- 在分区数量较大(例如超过1000个分区)或数据量较大(例如超过10万条)的情况下,对分组查询进行了性能优化:
- group by 后使用非分区列,且 select 子句中使用了不能进行分布式计算的函数,例如自定义函数。
- context by 后使用非分区列,且没有使用 [HINT_KEEPORDER] 关键字。
- 在分布式表的查询的过滤条件中,支持 DATE 类型与更高精度的时间类型进行比较。
- 限制写入分布式数据库的 STRING, BLOB 和 SYMBOL 类型的数据大小为64K、64M 和256字节。
- 增加2024年的交易日历。
缺陷修复
- [D20-18167] 开启资源跟踪后,可能导致 server 崩溃。(2.00.11.12)
- [D20-18356] 在执行 ej 操作时,若 where 条件中不指定表名则无法查询数据。(2.00.11.12)
- [D20-18430] 表连接时,若表里包含的数组向量中的元素超出长度限制时,导致 server 崩溃。(2.00.11.12)
- [D20-18522]
moveHotDataToColdVolume
在对相同分区进行并发转移时,发生数据丢失。(2.00.11.12) - [D20-18540] 作业开始时,如果磁盘被占满,则不能正确记录作业信息,如开始时间。(2.00.11.12)
- [D20-18553] 在高可用集群中,当 controller 发生重启,若 checkpoint 失败,可能导致元数据丢失。(2.00.11.12)
-
[D20-18554] 控制节点的元数据在极端情况下会出现一个分区路径对应多个 chunkid。(2.00.11.12)
- [D20-18640] 若
submitJob
或scheduleJob
中的任务包含 lambda 函数,当创建它们的 session 断开后,可能导致 server 崩溃。(2.00.11.12) - [D20-18780] 若异步复制任务中存在数据损坏,系统无法跳过该任务而持续重试。(2.00.11.12)
- [D20-18827] 通过
parseJsonTable
解析 JSON 对象时,若 JSON 对象的字符串中包含\\\"
时,会导致解析错误或报错。(2.00.11.12) - [D20-18935]
wsum
,wavg
等聚合函数的输入参数为一个标量和一个空数组时,返回错误结果。(2.00.11.12) - [D20-15652] 数据节点极小概率卡住。(2.00.11.11)
- [D20-18071] 提交批处理作业极小概率卡住。(2.00.11.11)
- [D20-18122] 对矩阵嵌套调用函数
move
和transpose
,例如move(m.transpose(),1)
,结果不符合预期。(2.00.11.11) - [D20-18194] 分区内存表之间进行 asof join,结果不符合预期。(2.00.11.11)
- [D20-18241] 通过函数
undef
取消定义正在写入数据的共享表,导致 server 崩溃。(2.00.11.11) - [D20-18284] SQL 语句中谓词
IN
后是 STRING 类型标量,偶发报错。(2.00.11.11) - [D20-18295] 查询数据时涉及分区的数据总条数接近 int 类型的最大值时可能报错。(2.00.11.11)
- 使用
ej
函数对键值内存表进行等值连接的结果错误。(2.00.11.9) - 并发执行添加或删除 functionView 操作时,若同时存在 checkpoint,则偶尔导致回放日志失败。(2.00.11.9)
- 并发执行清理维度表缓存和查询维度表操作时,偶尔导致查询失败。(2.00.11.9)
- 对一个数据库中的多个表并发执行
truncate
操作,在异步复制中出现从集群卡住。(2.00.11.9) - 使用
rpc
在远程节点运行包含递归函数的脚本时发生死循环。(2.00.11.7) - 在 SQL 语句中,如果数据库路径不是字符串,可能导致 server 崩溃。(2.00.11.6)
- 在流数据回放时,如果 worker 数远小于分区数,可能会导致回放任务卡住。(2.00.11.6)
- 当 SQL 查询包含 pivot by 子句,且 select/exec 子句包含表达式时,查询报错。(2.00.11.6)
- 从 Amazon S3 上恢复手动上传的备份文件时报错。(2.00.11.6)
- 当向
nunique
函数输入一个元组,且该元组的元素不是向量时,导致 server 崩溃。(2.00.11.5) - TSDB 在设置 keepDuplicates=ALL 时,若某个索引对应的数据量过大,没有正确对索引进行切分。(2.00.11.5)
- 异步复制偶尔发生卡住。(2.00.11.5)
- 当
at:R
或at:L
的入参是字典时,server 发生崩溃。(2.00.11.5) - 修复潜在的安全漏洞。(2.00.11.5)
- 定时任务设定在跨天时间段附近时,偶尔不执行。(2.00.11.4)
- 打开资源跟踪情况下,偶尔发生宕机。(2.00.11.4)
- 传入
mrank
函数的数据量过大使得栈溢出,进而导致宕机。(2.00.11.3) - 具有函数模式的二元运算符出现解析错误,例如:e.g +:A(1, 2 3 4)。(2.00.11.3)
- 使用
parseExpr
函数解析一个lambda
表达式后再执行eval
函数时抛出异常。(2.00.11.3) - server 误将自定义函数返回的 CODE 类型识别为 STRING 类型。(2.00.11.3)
- 通过 rpc 函数调用执行 module 中的函数时反序列化失败。(2.00.11.3)
- 2.00.11 及之后版本,在开启异步复制时 controller 节点提交事务失败,进而导致异步复制数据被提前回收。(2.00.11.3)
- 执行 SELECT 子句时,若包含无参
last()
且对 group by 分组列使用了向量化运算会引起宕机。(2.00.11.3) - 执行 SELECT 子句时若输入表中不存在的如 datetime 列,列名可能会被解析成如 datetime函数进而导致抛出异常。现增加分组、排序中的强转检查,若列名不是 vector 对象时则返回报错信息。(2.00.11.3)
- 副本在线恢复过程中,当存在大量差异数据待恢复时,可能引起数据不一致。(2.00.11.2)
- 内存不足(Out of memory)引起偶发性的 server 崩溃。(2.00.11.2)
- 进行远程流数据订阅,罕见场景下由并发竞态条件导致 server 崩溃。(2.00.11.2)
- 批处理作业线程创建失败导致批作业在队列中卡住,无法执行。(2.00.11.2)
- 当函数视图包含使用
update
更新共享表的操作时,会导致反序列化失败,进而导致 server 无法启动。(2.00.11.1) - 对同一事务频繁进行决议请求,导致事务一直处于决议状态。(2.00.11.1)
- 集群压力过大时,登录或通过 web 关机时可能会卡住。(2.00.11.1)
-
getUserTableAccessRecords
返回的表中, script 字段的内容会被逗号截断。(2.00.11.1) - 多个事务导致内存频繁 OOM 后回滚,偶尔出现元数据不正确。(2.00.11.1)
each
的输入是元代码生成函数(如makeCall
,binaryExpr
等)的部分应用时,结果不正确。(2.00.11.1)upsert!
指定 obj 为键值内存表,且键值列类型为 STRING ,newData 对应的列类型为 SYMBOL 且包含了新的键值,同时指定 ignoreNull=true 时,会导致 server 崩溃。(2.00.11.1)-
rowImax
,rowImin
,rowImaxLast
,rowIminLast
的输入是 columnar tuple 时,计算结果不正确。(2.00.11.1) add
函数输入是 BLOB 类型的向量时,结果不正确。(2.00.11.1)- 通过
update
更新分布式表,且对跨分区数据使用聚合函数、序列函数、自定义函数时,更新结果不正确。(2.00.11.1) - SQL 查询的
where
条件的结果为 NULL 时,查询结果不为空。(2.00.11.1) - 当
where
中使用AND
连接使用了聚合函数的条件时,和order by
搭配使用,查询结果不正确。(2.00.11.1) - SQL 查询
order by
中使用变量名时会报错。此为 2.00.10 版本引入的问题。(2.00.11.1) - SQL 查询中,使用
case when
对空表进行判断时,出现 server 崩溃。(2.00.11.1) -
order by
语句中使用find
函数出现报错。此为 2.00.11 版本引入的问题。 - 进行流数据订阅时,偶尔出现 server 崩溃。(2.00.11.1)
- 流数据反复订阅和取消订阅后,会存在多个相同的 topic。(2.00.11.1)
createReactiveStateEngine
设置 parallelism 参数,且 metrics 中含有常量表达式时,会报错。(2.00.11.1)-
sliceByKey
输入为共享键值表时,出现报错。(2.00.11.1) - 在 TSDB 引擎下创建表时,若未指定 sortKeyMappingFunction 或将其指定为
asis
函数,则从备份恢复数据时将出现报错。(2.00.11.1) - 通过
deleteReplicas
无法删除多余的异常副本。(2.00.11.1) - 函数视图嵌套使用时,出现无访问权限的报错。
- 向 window join engine 的数组向量列追加包含空值的数据导致 server 崩溃。
- 空维度表从备份中恢复后,重启后再次读取该表会报错“No such file or directory”。
- TSDB 引擎建表时若设置了sortKeyMappingFunction,则查询时若 Cache Engine 里的数据正好在刷盘,则会偶发地报类型不匹配的错误。
- 当对 TSDB 引擎的表字段使用
ols
函数时,若查询语句中没有使用 where 设置筛选条件,则会导致 server 崩溃。 - 通过 rename! 重命名表字段时,偶尔出现报错。
- 控制节点配置 dataSync=1,计算节点若不配置 chunkCacheEngineMemSize 则启动失败。
- 分布式表写入大小超过64K的字符串后,server 重启时因回放出现问题而无法启动。
nunique
计算多字段的唯一值时概率性出现结果错误。- 当对 TSDB 引擎的表的 array vector 类型的列使用
each
时,若 sql 中没有 where 筛选条件,则会导致 server 崩溃。 - 高阶函数模式符号 :R 没有对参数数量进行校验,在输入错误数量的参数时,server 崩溃。
- 使用
loadText
导入不合法编码的 csv 文件时不报错,但查询时出现报错。 byRow
输入矩阵且对矩阵应用string
函数时,结果不正确。align
函数指定标签为非递增且包含重复值的序列时,结果不正确。peach
并行计算忽略了对空值处理,概率性出现计算结果与串行计算结果不一致的情况。- 调用
resample
函数会导致内存泄露。 corrMatrix
会修改传入参数的值。fromJson
存在以下问题:- JSON 字符串中字典的 value 是空元组时,会导致 server 崩溃
- JSON 字符串中字典的 value 是元组嵌套元组时,结果不正确。
unionAll
同时指定了partition 和 byColName 时,有时会报行数不匹配的错误。streamEngineParser
中使用 row 系列函数的指标中若调用了返回多个值的函数,则会因指标解析错误而导致引擎创建失败。- 同一个流表被不同消费速度的订阅者订阅时,出现消费慢的订阅者无法读取数据。
- 向 Lookup Join 引擎的左表注入空表时,server 崩溃。
- 当两个节点同时调用
unsubscribeTable
取消到另一个节点上的远程订阅时,会导致死锁。 createTimeSeriesEngine
指定 timeColumn 为多列,且对其中某列进行计算时,计算结果不正确。-
context by
子句搭配map
关键字,没有得到所有分区的结果。 select
子句中使用序列相关函数,同时搭配context by
和csort
进行查询时,没有进行组内排序后再计算。select
子句搭配group by
使用,且select
中的聚合函数参数为一个向量的切片时,会出现报错。- SQL
where
子句中使用了与函数视图同名的变量名,且使用了and
运算符时,会错误地将变量名解析为函数名。 drop table
语句后面的变量不存在时,会导致 server 崩溃。select
子句中使用zigzag
函数,和context by
搭配使用时,结果不正确。- 使用 windows 版本 server,查询语句中对很长的字符串应用
group by
时,导致 server 崩溃。 sqlDS
生成的连接两个分布式表的数据源时,数据源中会缺失右表分区信息。