2.00.12
版本下载
版本号: 2.00.12 二级兼容 2.00.11 和 1.30.23
发行日期: 2024-03-31
新功能
- 函数
mcount
、mrank
新增参数 minPeriods,可规定滑动窗口中最少包含的观测值数据。(2.00.12.6) - 新增函数
updateOrderBookEngineParams
,用于在线设置 orderbookSnapshotEngine 的部分参数(通常是静态字段)值。(2.00.12.6) - 新增函数
createStreamBroadcastEngine
,用于创建流数据广播引擎。(2.00.12.4) - 支持
fromStdJson
函数,将标准 JSON 文本转化为符合 DolphinDB 标准的数据。(2.00.12.2) - 支持
parseInteger
函数(别名:parseInt
),按照不同进制将字符串转换为指定的整数类型。(2.00.12.2) - 支持函数
backupSettings
和restoreSettings
,分别用于备份或恢复当前数据库系统中的所有用户、用户权限信息和函数视图。(2.00.12.2) - 新增函数
VaR
和CVaR
,分别用于计算风控指标(VaR)和条件风险指标(CVaR) 。(2.00.12.1) - 新增函数
nss
和nssPredict
,分别用于拟合债券的收益率曲线和预测债券的收益率。(2.00.12.1) - 新增配置项
enableShellFunction
,用于设置是否允许用户调用 shell 函数。默认不允许任何用户调用。(2.00.12.1) - 新增函数
matrixRank
,用于矩阵求秩。 - 新增函数
bondAccrInt
(别名:fiAccrInt
),用于计算有价证券的应付利息。 - 新增函数
pinverse
,用于求伪逆矩阵。 - 新增函数
geoWithin
,用于判断点是否在多边形中。 - 新增函数
getDfsRecoveryConcurrency
和resetDfsRecoveryConcurrency
,分别用于在控制节点上获取和设置数据恢复的最大并发任务数。 - 新增函数
getDfsRebalanceConcurrency
和resetDfsRebalanceConcurrency
,分别用于在控制节点上获取和设置数据再平衡的最大并发任务数。 - 新增函数
getTSDBTableIndexCacheStatus
,用于查看当前节点已加载的数据库中表的 Level File 索引所占用的内存。 - 新增函数
rowGroupby
,用于按行进行分组聚合。 - 新增函数
wslr
,用于计算加权最小二乘回归,返回值为元组。 - 新增函数
digitize
,用于根据自定义值对数据分桶。 - 新增函数
lowerBound
,用于查找递增对象中第一个大于等于指定值的元素的下标。 - 新增函数
fmin
,用于使用 Nelder-Mead 单纯形算法找到目标函数的最小值。 - 新增函数
pdfF
,pdfChiSquare
,pdfNormal
,分别用于计算 F 分布、卡方分布、正态分布的概率密度。 - 新增函数
createReactiveStateLessEngine
,用于在每次数据注入后根据依赖关系更新并输出对应数据的状态。 - 新增函数
kroghInterpolate
,用于对一组点集进行多项式插值。 - mTopN 系列新增函数:
mpercentileTopN
。 - m 系列新增函数
mfirstNot
,mlastNot
,mLowRange
,mTopRange
。 - 新增函数
minIgnoreNull
和maxIgnoreNull
,分别用于计算两个操作数中忽略空值后的最小值、最大值。 - tm 系列新增函数:
tmLowRange
,tmTopRange
。 - 新增支持 ZSTD 压缩算法。
- 新增函数
setDynamicConfig
,用于修改指定的配置项。 - 新增函数
getDynamicConfig
,用于获取所有可动态修改的配置项名。 - 新增配置项 decimalRoundingMode,用于指定全局的 DECIMAL 类型转换的舍入模式。
- 新增配置项 checkExistingPartitionNumForQuery,用于从控制节点获取实际存在的分区数量。
- 新增配置项 enableAuditLog 和
auditLogRetentionTime,分别用于记录审计日志和设置审计日志的保留时间,同时新增函数
getAuditLog
,用于查询审计日志。 - 新增配置项 enableNullSafeJoin,用于确定表连接时的空值匹配规则。
- 新增函数
setStreamTableTimestamp
,用于为指定的流数据表设置一个时间戳列以记录数据写入流表时的时间。 - JIT 支持 set 和字典形式。
- JIT 支持构造数组向量。
- JIT 支持字符串。
- JIT 支持多返回值。
- 支持通过
use
关键字在脚本中调用后缀为 .dom 的模块文件。 - 支持创建 DECIMAL 和 STRING 类型的矩阵。
- 支持在 SQL 语句中使用宏变量和字段序列。
功能改进
- 优化了当消费速度较慢时的内存占用。(2.00.12.9)
- 当已有分区数量达到百万级以上时,提升创建新分区的性能。(2.00.12.8)
parseJsonTable
函数支持传入的表中包含 BLOB 类型的列。(2.00.12.7)- 优化控制节点元数据 checkpoint 机制,在元数据较大的情况下减少 checkpoint 频率。(2.00.12.7)
- 分区方案使用时间类型时,对分区列的类型增加校验。(2.00.12.7)
- 响应式状态引擎的状态函数
percentChange
和deltas
允许将参数 n 指定为正整数。(2.00.12.7) - 优化登录失败保护机制,即仅在登录失败的 IP 地址上锁定用户登录。(2.00.12.6)
- 若 TSDB 引擎的去重设置为保留所有数据,则通过
upsert!
更新数据时,支持 keyColNames 仅指定 sortColumns 的部分列。(2.00.12.6) - 优化 orderbookSnapshotEngine 的以下功能:
- LONG[], INT[] 类型数据可以输出到 DOUBLE[] 类型字段中。(2.00.12.6)
- 优化合成逻辑,已停牌的标的数据将不会合成输出。(2.00.12.6)
- 增强对函数视图和模块中函数的访问权限。(2.00.12.4)
- 优化对分区列的最大值、最小值查询。(2.00.12.4)
groupby
函数支持传入元组类型(等长向量)的 groupingCol 。(2.00.12.2)sortBy!
函数支持对键值内存表指定排序方向。(2.00.12.2)rowGroupby
函数新增参数 ascending,支持设置输出的排序方向。(2.00.12.2)fixedLengthArrayVector
函数支持合并固定长度数组向量。(2.00.12.2)createCrossSectionalEngine
增加 keyFilter 参数,用于过滤不满足条件的 key。(2.00.12.2)createOrderBookSnapshotEngine
优化以下内容:(2.00.12.2)- 支持上交所逐笔合并数据中的订单状态数据。
- 撤单类型增加原始委托量的相关字段:WithdrawBuyOrderQtyList, WithdrawSellOrderQtyList。
- 支持对全部的 exchange 将 outputColMap 指定为
genOutputColumnsForOBSnapshotEngine
函数返回的任意字段。 - 设置 exchange="XSHGFUND" 时只输出 5 开头的分组。
- 优化
replay
函数全速回放异构流表的性能。(2.00.12.1) license
函数新增可选参数 read,用于指定是否对 license 文件进行校验。(2.00.12.1)createOrderBookSnapshotEngine
的参数 orderBookDetailDepth 支持设置订单簿明细档位。(2.00.12.1)genOutputColumnsForOBSnapshotEngine
的参数 orderBookDetailDepth 支持设置输出的订单簿明细档位。(2.00.12.1)createPartitionedTable
的 sortKeyMappingFunction 参数支持设置为hashBucket{, 1}
。(2.00.12.1)- 优化 TSDB 引擎以下场景中的查询效率:对 sort key 使用 in 进行过滤。(2.00.12.1)
- 提升系统安全性,对密码进行加密后存储。(2.00.12.1)
- 函数
createTable
新增别名createDimensionTable
。 - 优化函数
lasso
、ElasticNet
的计算性能。 - 函数
nunique
和cumnunique
新增参数 ignoreNull,用于统计非空的唯一值个数。 - 函数
round
支持的精度由 8 位提升到 10 位。 mifirstNot
,miLastNot
,mfirstNot
,mlastNot
,mimax
,mimin
函数支持索引序列和索引矩阵。- 生成部分应用时支持通过
DFLT
关键字使用默认值固定可选参数的默认值。 - 函数
deltas
和percentChange
新增参数 n,用于指定计算差异数据点的间隔。 - 函数
fiDirtyPrice
,fiDuration
和fiConvexity
新增参数 bondType,实现对零息债券和贴现债券的支持。 - 函数
saveText
,loadText
,loadTextEx
,ploadText
,textChunkDS
新增参数 arrayMarker,用于指定标识数组向量的符号。 replayDS
支持含有 DECIMAL 类型数据的输入表。- 函数
warmupStreamEngine
支持时序聚合引擎。 - 函数
moving
支持返回的结果为元组的 func。 - 函数
sql
新增参数 map,用于生成关键字map
相关语句。 - 函数
ols
新增参数 usePinv,用于选择计算过程中采用的求逆方法。 - 函数
tmoving
新增参数 excludedPeriod,用于在计算时跳过指定时间区间。 at
作为高阶函数时,当参数为 tuple 时,会把 tuple 的每一个元素作为 func 的参数。- 函数
each
允许 func 是多个参数的函数,且第一个参数为字典。 - 优化数据平衡算法。
- 函数
rebalanceChunksAmongDataNodes
和rebalanceChunksWithinDataNode
新增参数 updateBeforeDays,表示只移动 updateBeforeDays 天之前的数据。 cross
函数支持返回值为 CODE,FUNCTIONDEF,STRING,BLOB 类型的函数。- TSDB 引擎进行了如下优化:
- 优化读取 Cache Engine 数据的性能。
- sortColumns 支持 DECIMAL 类型。
- 异步复制任务支持在数据库层级设置优先级队列。
- 单节点模式支持设置分级存储。
- 单节点模式支持调用函数
rebalanceChunksWithinDataNode
。 - 计算节点支持调用以下函数:
createUser
,createGroup
,resetPwd
,changePwd
,deleteUser
,deleteGroup
,addGroupMember
,deleteGroupMember
,grant
,deny
,revoke
,setMaxJobPriority
,setMaxJobParallelism
,getUserList
,getGroupList
,getGroupsByUserId
,getUsersByGroupId
,getUserAccess
,getGroupAccess
。 - 键值表,索引表和键值流表支持数组向量类型。
- 优化内置聚合函数处理矩阵时的性能。
- 支持将启动命令记录到日志文件中。
- 支持更新分布式表中的数组向量列。
- 单节点模式下限制向分布式表中一次性写入超过 Cache Engine 大小的表。
- 向量、元组支持多行书写。
- 优化
WHERE
子句中有in
时的分区剪枝逻辑。 CREATE TABLE
语句支持参数 softDelete,用于启用软删除功能。- 表连接查询支持使用
HINT_EXPLAIN
关键字。 HINT_EXPLAIN
增加了与 TSDB 索引过滤相关的信息。update
语句支持CSORT
和HAVING
子句。- 优化
cross join
的性能。 - 优化维度表与分布式表连接的性能。
- 优化对单列调用
distinct
函数的性能 - 优化多个表连接并发时的性能。
- 在分布式查询 SQL 中,WHERE 条件中进时间类型的比较时,取消左侧精度不得低于右侧精度的限制。
- 完善分析函数(开窗函数)功能:
- 新增支持以下函数:
imin
,imax
,iminLast
,imaxLast
,firstNot
,lastNot
,sum2
,prod
,percentile
,wavg
,wsum
,corr
,covar
,beta
,atImax
,atImin
。 - RANGE 可以用来定义基于时间值的窗口范围。
- 支持与 group by 子句结合使用,此时支持嵌套聚合函数。
- 新增支持以下函数:
- 响应式状态引擎中支持对数组向量列调用函数
prev
和move
。 createAnomalyDetectionEngine
新增参数 anomalyDescription,支持自定义结果表中的异常条件内容。- 横截面引擎优化:
- 参数 contextByColumn 新增支持输入 STRING 类型向量。
- 新增参数 outputElapsedMicroseconds,支持输出延时与条数信息。
- 新增参数 roundTime,在参数 triggeringPattern 为 dataInterval 时控制自动规整窗口边界的尺度。
- 时序聚合引擎(
createTimeSeriesEngine
和createDailyTimeSeriesEngine
)优化:- 新增参数 parallelism支持对 metrics 进行多线程计算。
- 新增参数acceptedDelay,用于在使用系统时间时设置接收时延。
- 流计算引擎的参数 metrics 中支持
print
函数。
故障修复
- 当 TSDB 引擎写入的 DECIMAL 数据精度超过表结构设置的精度时,重启集群进行回放会发生错误。(2.00.12.9)
- 向键值内存表中插入表数据时,若插入的列和键值内存表键值列的类型不一致,且无法进行类型转换时,将导致 server 崩溃。此为 2.00.11.1/1.30.23.1引入的问题。(2.00.12.9)
- 修复
createCrossSectionalEngine
(横截面引擎)的以下问题(2.00.12.9):- metrics 中指定的别名数量少于返回的列数,导致服务器崩溃。
- 同时指定 contextByColumn 和 keyFilter 时,keyFilter 指定的函数会被调用两次。
- 在 asof join 引擎中,timeColumn 同时指定了左表和右表中的时间列,metrics 中仅指定右表时间列时,后台出现报错。(2.00.12.9)
- 当流计算引擎的输出表指定为共享表的别名时,如果发生并发写入共享表,server 偶发崩溃。(2.00.12.9)
- 在表连接操作中,偶发由于系统修改子查询中的变量名而导致找不到列名的错误。(2.00.12.9)
- 当 pivot by 指定的最后一列为分区字段时,若查询的数据量过大,则会报错。(2.00.12.9)
- 在并发读写包含数组向量的流数据表时,服务器发生崩溃。(2.00.12.8)
- 启用复杂密码校验(设置enhancedSecurityVerification=true)后,登录时可能会出现低概率崩溃的情况。(2.00.12.8)
- 流计算引擎输出到广播引擎,再通过广播引擎输出到持久化流表时,出现报错。(2.00.12.8)
- 函数视图中包含
insert into
语句导致 server 启动失败。(2.00.12.8) - [D20-18167] 开启资源跟踪后,可能导致 server 崩溃。(2.00.12.7)
- [D20-18430] 表连接时,若表里包含的数组向量中的元素超出长度限制时,导致 server 崩溃。(2.00.12.7)
- [D20-18522]
moveHotDataToColdVolume
在对相同分区进行并发转移时,发生数据丢失。(2.00.12.7) - [D20-18540] 作业开始时,如果磁盘被占满,则不能正确记录作业信息,如开始时间。(2.00.12.7)
- [D20-18548] 使用函数
createLookupJoinEngine
创建 LookupJoin 引擎时,若 rightTimeColumn 中包含大写字母,且在 metrics 中包含该列时,则会导致报错:”A table can't contain duplicate column names“。(2.00.12.7) - [D20-18553] 在高可用集群中,当 controller 发生重启,若 checkpoint 失败,可能导致元数据丢失。(2.00.12.7)
- [D20-18554] 控制节点的元数据在极端情况下会出现一个分区路径对应多个 chunkid。(2.00.12.7)
- [D20-18640] 若
submitJob
或scheduleJob
中的任务包含 lambda 函数,当创建它们的 session 断开后,可能导致 server 崩溃。(2.00.12.7) - [D20-18661] 当 SQL 查询中使用到 vectorized grouping 算法时,若聚合函数的某个参数是标量或大小与输入表不匹配的向量时,可能导致结果错误。(2.00.12.7)
- [D20-18703] 在对分布式表进行 EXEC 查询时,如果指定了 ORDER BY 和 LIMIT/TOP(设置为正数),且 ORDER BY 仅涉及一个分区列且采用降序排序,引发错误:“The result of distributed call is not a table”。(2.00.12.7)
- D20-18780] 若异步复制任务中存在数据损坏,系统无法跳过该任务而持续重试。(2.00.12.7)
- [D20-18790] 使用 order by 和 limit/top 进行分布式查询优化时,在执行最终查询时找不到所需的列。(2.00.12.7)
- [D20-18827] 通过
parseJsonTable
解析 JSON 对象时,若 JSON 对象的字符串中包含 \\\" 时,会导致解析错误或报错。(2.00.12.7) - [D20-18935]
wsum
,wavg
等聚合函数的输入参数为一个标量和一个空数组时,返回错误结果。(2.00.12.7) - [D20-18152] 某个最大优先级或并行度小于默认值的用户通过 Web 或 VS Code 提交前台任务,该任务的优先级或并行度仍为默认值。(2.00.12.6)
- [D20-18245] 执行
backup
函数时,如果过滤条件是组合分区的一级分区,而二级分区中的部分分区没有数据,则会导致报错。(2.00.12.6) - [D20-18312] 对 arrayVector 类型的列查询 distinct 导致 server 崩溃。(2.00.12.6)
- [D20-18356] 在执行 ej 操作时,若 where 条件中不指定表名则无法查询数据。(2.00.12.6)
- [D20-18423] 执行传入不合规参数的
createWindowJoinEngine
函数后宕机。(2.00.12.6) - [D20-18122] 使用
move
函数时,若传入参数 X 是临时变量可能导致计算结果错误。(2.00.12.6) - [D20-18219] 多次执行
mpercentile
函数偶现宕机。(2.00.12.6) - [D20-18331] JIT 中使用
rank
函数时由于类型推导问题报错。(2.00.12.6) - [D20-18291] JIT 中使用
isort
函数时由于兼容性问题报错。(2.00.12.6) - 使用
ej
函数对键值内存表进行等值连接的结果错误。(2.00.12.4) - 并发执行添加或删除 functionView 操作时,若同时存在 checkpoint,则偶尔导致回放日志失败。(2.00.12.4)
- 并发执行清理维度表缓存和查询维度表操作时,偶尔导致查询失败。(2.00.12.4)
- 对一个数据库中的多个表并发执行
truncate
操作,在异步复制中出现从集群卡住。(2.00.12.4) - 通过配置项 preloadModules 加载的模块中包含递归调用函数,导致节点卡住。(2.00.12.3)
- 客户端重连时偶发登录失败。(2.00.12.3)
- 耗时过长的 TSDB 事务导致回放 RedoLog 时偶发 server 崩溃。(2.00.12.3)
- left join 导致偶发的 server 崩溃。(2.00.12.3)
- 数组向量的内存占用统计不准确。(2.00.12.3)
- 在 SQL 查询中,如果
interval
函数的第一个参数不是表中的列,可能导致 server 崩溃。(2.00.12.2) - 函数
mmad
的参数 minPeriods 对前 window 个元素不生效。(2.00.12.2) - 在 SQL 语句中,如果数据库路径不是字符串,可能导致 server 崩溃。(2.00.12.2)
- 当查询分布式表时,如果 context by 子句包含的列数大于 2,且 csort 包含 context by 的列,结果不正确。(2.00.12.2)
- 在流数据回放时,如果 worker 数远小于分区数,可能会导致回放任务卡住。(2.00.12.2)
- 当 SQL 查询包含 pivot by 子句,且 select/exec 子句包含表达式时,查询报错。(2.00.12.2)
- 从 Amazon S3 上恢复手动上传的备份文件时报错。(2.00.12.2)
- 对键值表使用
sortBy!
排序时,不支持设置参数 sortDirections。(2.00.12.2) - 对空表进行 SQL 查询时,如果包含 context by 子句,且 select 子句中调用函数 eachPre,则查询报错。此为 2.00.11.1 版本引入的问题。(2.00.12.2)
- 在宏变量的元编程中,按分组对多列应用函数模式进行计算,若计算函数为聚合或序列相关函数,则有时结果不正确。(2.00.12.2)
- 表为值分区,且分区列是 STRING 或 SYMBOL,若 where 指定的分区列中含有小数点或其他特殊符号,可能会导致 where 中的等号失效。此为 2.00.12 版本引入的问题。(2.00.12.2)
- 对 select 查询的列调用
join
函数后再进行聚合计算,会出现报错。(2.00.12.2) - 在 SQL 查询中,
moving
高阶函数调用 ols,可能会导致 server 崩溃。(2.00.12.2) - 订阅流数据写入分布式表时,在 batchSize=1 时,出现 DECIMAL 数据丢失精度。(2.00.12.2)
createOrderBookSnapshotEngine
的 outputCodeMap 参数中指定了包含重复值的向量时,导致 server 崩溃。(2.00.12.2)- 高可用流表场景下,在节点重启时,若流表已完成加载,但 Raft 还未完成初始化,可能导致 server 崩溃。(2.00.12.2)
- 在异步复制中,从集群的 Leader 切换为 Follower 后又重新被选举为
Leader,此时执行
getSlaveReplicationQueueStatus
返回的 executionSet 会显示随机数。(2.00.12.2) - 对分布式表使用
ej
,同时在 where 子句中使用了外部变量,会报错 “Unrecognized column name”。(2.00.12.2) - ARM 版本多线程查询导致 server 崩溃。(2.00.12.1)
- 开启资源跟踪后,对内存表并发执行
select
和append!
操作导致 server 崩溃。(2.00.12.1) clearCachedModules
函数在命令行执行不生效。(2.00.12.1)wj
的 aggs 参数中使用head
函数导致 server 崩溃。(2.00.12.1)- 递归或嵌套调用 JIT 函数,在内部编译失败时,server 发生崩溃。(2.00.12.1)
- 分布式查询的
WHERE
子句中包含生成临时变量的函数调用导致 server 崩溃。(2.00.12.1) - 在查询中,分析函数无法正确识别多表连接中的列。(2.00.12.1)
- 修复潜在的安全漏洞。(2.00.12.1)
dropPartition
指定 deleteSchema=true 删除分区数据及分区方案信息后,通过schema
函数仍然返回这个分区结构。iif
的结果是元代码时返回值类型为 STRING。- 函数视图的 body 字段过长时,调用
getFunctionViews
出现报错。 - 当函数内使用
cast($)
将数据转换为相同类型时,多次调用函数,出现数据块未被清空。 lshift
(<<) 和rshift
(>>) 的结果包含空值时,导致 server 崩溃。- 在 makeKey 中使用未定义的变量,导致 server 崩溃。
copyReplicas
函数允许将 chunk 拷贝到计算节点上。format
对 DECIMAL 数据格式化的的结果不正确。med
函数在输入数据量太大时,导致 server 崩溃。- 当向
nunique
函数输入一个元组,且该元组的元素不是向量时,导致 server 崩溃。 asof
输入的 X 和 Y 是全为空值的向量时,结果错误。- 向量插入数据时,没有检查是否超出最大范围。
lj
,aj
等所有 join 函数不支持 keywords 传参。- 配置 enableLocalDatabase=false 后,无法通过
database
创建内存数据库。 - 在
sqlDS
函数中,如果 sqlObj 参数的WHERE
子句包含IN
关键字,则未进行查询剪枝优化。 - 在单节点模式下,由于 edit log 的写入早于 redo log,导致事务被错误地回放。
- 对于以下类型数据,响应式状态引擎
cummin
计算的结果与批计算的结果不同:UUID, INT128, IPADDR, COMPLEX 和 POINT。 - 函数名和函数体间添加注释,出现报错。
- 清理持久化流表的过期文件时,若某个文件不存在,则会不断尝试清理此文件,导致清理过程卡住。
- 若存在过时的分区,可能导致垃圾回收过程中错误地将相同路径下的新分区数据一并回收。
PIVOT BY
查询中对 DECIMAL 类型的数组向量进行计算导致 server 崩溃。- 查询语句中同时使用
CASE
和WHERE NOT
时,会导致 server 崩溃。 SELECT FROM
中出现三个及以上的UNION ALL
会导致报错。- 对分布式表的 CHAR 字段查询时,过滤条件用双引号和单引号入结果不一致。
- 对排序后的 keyedTable 查询结果错误。
- 在 SQL 中将矩阵分配给多个输出列时,结果不正确。
- 当对多个分布式表进行 join 操作时,使用
EXISTS
语句导致 server 崩溃。 - 使用
GROUP BY
对值分区列分组时,SELECT
中使用非聚合函数未报错。 - 对 sort key 进行
PIVOT BY
,且SELECT
的结果是数组向量时,出现报错。 - 在 SQL 中,当使用具有多个返回值的函数并结合
WHERE
子句时,出现报错。 - 当时序聚合引擎设置 useSystemTime=true 时,metrics 中出现数组访问越界,导致 server 崩溃。
- 时序聚合引擎对返回数组向量的函数解析异常。
- orderbookSnapshotEngine 在参数 includeTradeDetail=true 时,设置 outputCodeMap 无效。
- 当持久化流表写入失败时,可能导致订阅任务无法正常消费数据。
createNarrowReactiveStateEngine
的计算指标个数和 metricNames 的长度不一致,导致 server 崩溃。- 响应式状态引擎中使用
nullFill!
出现报错,此为2.00.11.2引入的问题。 - JIT 函数的形参和内部函数同名导致 server 崩溃。
- 在 JIT 中向向量追加新值后,无法通过索引访问和修改该值。
- 在 JIT 函数中对向量中追加、赋值空值后,后续使用该空值会出现结果错误。