【已解决】随机数据丢失问题

Viewed 58

我在使用的时候发现有时候会出现随机的数据丢失问题,不知道是什么原因导致的
建表代码

create table test_trade_calendar (
    trade_dt date not null
)
UNIQUE KEY(`trade_dt`)
DISTRIBUTED BY HASH(`trade_dt`) BUCKETS AUTO
PROPERTIES (
    "replication_allocation" = "tag.location.default: 1"
);

然后执行的操作是

  1. 批量插入20180101到最新日期的连续日期
  2. 每天定时插入当天的一个日期,例如在0点插入当天的日期
  3. 每个小时校验数据完整性,即检查过去30天是否有数据缺失,正常情况下应当为连续的日期

执行上述流程短至一天多至一周就会出现数据缺失的问题,大致缺失的情况如图
image.png

因为sql是其他框架产生的,我就把和这个表相关的audit_log导出了一下

audit_log

可以看到在316行正常应当返回30行数据,实际只返回了29行,最相近的301行正常返回了30行数据

在版本2.0.3和2.1.1都存在这个问题

能否请各位大佬帮忙检查一下是什么原因,非常感谢!

原问题镜像

1 Answers

之前有遇到过一个问题,可能是相同的:
对于这种只有KEY列,没有Value列的 Unique 模型,会导致key column group的最后一列不是delete sign。而现在的代码逻辑里,认为key group 的最后一列是delete sign。这导致了vertical compaction的时候,错误的删除了数据。

解决方案

  1. 在 be.conf 加上 enable_vertical_compaction = false,重启be
  2. 升级到 2.0.8,已经在这个pr修复了:https://github.com/apache/doris/pull/32896