请帮我判断下这是不是存在重复时间主键

【TDengine 使用环境】
预生产环境

【TDengine 版本】

3.3.8.8

【操作系统以及版本】

Ubuntu

【部署方式】

容器

【集群节点数】

单节点

【集群副本数】

单副本

【描述业务影响】

从A表通过Stream汇总数据到B表时,发现时间戳出现重复

【问题复现路径/shan】

之前Stream出过问题报param error,自动undeploy后,删除旧stream重新建stream启动,今天例行巡检发现时间重复的数据

【遇到的问题:问题现象及影响】

通过stream从A表按秒汇总数据到B表中,理论上时间戳不应该出现重复

【资源配置】

4核心 8G A表和B表都是不到300个子表

【报错完整截图】(不要大段的粘贴报错代码,论坛直接看报错代码不直观)


CREATE STABLE IF NOT EXISTS mod_emo_detect_log(
        ts TIMESTAMP,
        con_id INT COMPOSITE KEY,
        emo INT,
        confi FLOAT,
        weight FLOAT
    ) TAGS (
        user_id INT
    )
    KEEP 90d;


CREATE STABLE IF NOT EXISTS mod_emo_detect_data(
        ts TIMESTAMP,
        con_id INT COMPOSITE KEY,
        emo INT,
        confi FLOAT,
        detect_count INT,
        weight FLOAT
    ) TAGS (
        user_id INT
    )
    KEEP 36500d;



taos> select ts,con_id,emo,weight,confi,user_id from mod_emo_detect_log order by ts desc limit 10;
           ts            |  con_id  |   emo   |   weight    | confi      | user_id   |
======================================================================================
 2026-05-05 14:28:44.803 |       15 |       0 |         0.2 |   0.857427 |       309 |  XXX
 2026-05-05 14:28:39.546 |       15 |       0 |         0.2 |   0.815098 |       381 |
 2026-05-05 14:28:39.546 |       15 |       0 |         0.2 |   0.844953 |       377 |
 2026-05-05 14:28:39.546 |       15 |       0 |         0.2 |   0.806491 |       312 |
 2026-05-05 14:28:39.546 |       15 |       0 |         0.2 |   0.699967 |       295 |
 2026-05-05 14:28:39.546 |       15 |       0 |         0.2 |   0.704526 |       300 |
 2026-05-05 14:28:39.546 |       15 |       0 |         0.2 |   0.567211 |       398 |  XXXXXX
 2026-05-05 14:28:38.619 |       15 |       0 |         0.2 |   0.689002 |       398 |
 2026-05-05 14:28:38.619 |       15 |       0 |         0.2 |   0.707646 |       300 |
 2026-05-05 14:28:38.619 |       15 |       0 |         0.2 |   0.677549 |       295 |
Query OK, 10 row(s) in set (0.013765s)


taos> select ts,con_id,emo,weight,confi,detect_count,user_id from mod_emo_detect_data  order by ts desc limit 12;
           ts            |  con_id  |   emo   | weight     | confi      | detect_count | user_id   |
====================================================================================================
 2026-05-05 14:28:44.000 |       15 |       0 |        0.2 |   0.857427 |            1 |       309 |  XXX 子表B309
 2026-05-05 14:28:44.000 |       15 |       0 |        0.2 |   0.857427 |            1 |       309 |  XXX 子表B309
 2026-05-05 14:28:39.000 |       15 |       0 |        0.2 |   0.815098 |            1 |       381 |
 2026-05-05 14:28:39.000 |       15 |       0 |        0.2 |   0.815098 |            1 |       381 |
 2026-05-05 14:28:39.000 |       15 |       0 |        0.2 |   0.704526 |            1 |       300 |
 2026-05-05 14:28:39.000 |       15 |       0 |        0.2 |   0.844953 |            1 |       377 |
 2026-05-05 14:28:39.000 |       15 |       0 |        0.2 |   0.806491 |            1 |       312 |
 2026-05-05 14:28:39.000 |       15 |       0 |        0.2 |   0.699967 |            1 |       295 |
 2026-05-05 14:28:39.000 |       15 |       0 |        0.2 |   0.567211 |            1 |       398 |  XXXXXX 子表B398
 2026-05-05 14:28:39.000 |       15 |       0 |        0.2 |   0.567211 |            1 |       398 |  XXXXXX 子表B398
 2026-05-05 14:28:38.000 |       15 |       0 |        0.2 |   0.689002 |            1 |       398 |
 2026-05-05 14:28:38.000 |       15 |       0 |        0.2 |   0.677549 |            1 |       295 |
Query OK, 12 row(s) in set (0.046969s)

标记的XXX和XXXXXX为存疑相关数据,且mod_emo_detect_data中重复数据确认是在同一张子表中,标记XXX的都在子表B309,标记XXXXXX的都在子表B398

这个结果看起来确实是出现了重复数据。
请将建流的 sql 发送出来,我们在本地测试一下,看能不能复现。
如果复现不了,可能需要您能远程让我们分析一下。


CREATE STREAM IF NOT EXISTS strm_handle_mod_emo_detect_log INTERVAL(1s) SLIDING(1s)
  FROM mod_emo_detect_log PARTITION BY tbname, user_id
    STREAM_OPTIONS( LOW_LATENCY_CALC | MAX_DELAY(1m) | EVENT_TYPE(WINDOW_CLOSE) | IGNORE_NODATA_TRIGGER )
  INTO mod_emo_detect_data
    OUTPUT_SUBTABLE(REPLACE(%%tbname, 'mod_emo_detect_log', 'mod_emo_detect_data'))
    (ts, con_id, emo, confi, detect_count, weight)
  TAGS  (user_id INT AS user_id)
  AS SELECT _twstart AS ts, con_id, emo, CAST(AVG(confi) AS FLOAT) AS confi, 
      CAST(COUNT(0) AS INT) AS detect_count,  MODE(weight) AS weight
    FROM %%tbname  WHERE ts >= _twstart AND ts < _twend GROUP BY con_id, emo
    ORDER BY COUNT(0) DESC, SUM(confi) DESC LIMIT 1;

您好,这个是建流的语句,辛苦您帮忙看看,还望请多指教。

这个流之前遇到过param error,也不知道是啥情况,重建后就没问题,为了排除着隐患,应该从哪里入手,从输入数据来排查吗?

建流语句失败,其中 GROUP BY con_id, emotion : 这个 emotion 列哪里来的,没有找到哪个超级表有这个列?

不好意思,这个地方当时应该是按tab自动补全了,应该是

select ts,con_id,emo,weight,confi,detect_count,user_id from mod_emo_detect_data order by ts desc limit 12;
请执行一下查询流结果记录sql,但在最前面增加一个 tbname ,确认一下是不是一个子表中有相同时间戳的记录。

select tbname, ts,con_id,emo,weight,confi,detect_count,user_id from mod_emo_detect_data order by ts desc limit 12;

对于复合主键的情况,3.3.8 版本的流计算模块有个bug,已经在3.4修复了,建议升级到最新的3.4.1.x 版本。

我排查数据重复时,查询了相关记录的tbname,重复时间戳的数据的确是在同一个子表中。

好的,我今晚更新一下版本试试。
从3.3.8升级到3.4.1版本,有无需要注意的特殊事项?

没有需要特别注意的,直接覆盖安装就可以。

您好,升级后遇到这个问题怎么处理?

OOS版本 3.3.8.8 ——> 3.4.1.6

您好,在将TDengine TSDB-OSS Docker版升级到3.4.1.6后,今天还是发现了有几个重复时间戳。

这种重复时间戳数据目前观察到都是出现在同批次流处理结果的最后一个。(PS:表述可能不准确和严谨。我们创建的Stream的输入数据源有时候不是连续的,这里指的是一段连续数据点断开时最后一个时间点的计算结果。)

taos> select ts,con_id,emo,weight,detect_count,user_id from mod_emo_detect_data  order by ts desc limit 12;
           ts            |con_id| emo|weight| detect_count |user_id|       tbname             |
===============================================================================================
 2026-05-09 20:47:25.000 |   15 |  0 |  0.2 |            1 |   384 | mod_emo_detect_data_0384 |
 2026-05-09 20:47:25.000 |   15 |  0 |  0.2 |            1 |   384 | mod_emo_detect_data_0384 |
 2026-05-09 20:47:24.000 |   15 |  0 |  0.2 |            1 |   384 | mod_emo_detect_data_0384 |
 2026-05-09 20:47:23.000 |   15 |  0 |  0.2 |            1 |   384 | mod_emo_detect_data_0384 |
 2026-05-09 20:47:22.000 |   15 |  0 |  0.2 |            1 |   384 | mod_emo_detect_data_0384 |
 2026-05-09 20:47:21.000 |   15 |  0 |  0.2 |            1 |   384 | mod_emo_detect_data_0384 |
 2026-05-09 20:47:20.000 |   15 |  0 |  0.2 |            1 |   384 | mod_emo_detect_data_0384 |
 2026-05-09 20:47:16.000 |   15 |  0 |  0.2 |            1 |   384 | mod_emo_detect_data_0384 |
 2026-05-09 20:47:15.000 |   15 |  0 |  0.2 |            1 |   384 | mod_emo_detect_data_0384 |
 2026-05-09 20:47:14.000 |   15 |  0 |  0.2 |            1 |   384 | mod_emo_detect_data_0384 |
 2026-05-09 20:47:13.000 |   15 |  0 |  0.2 |            1 |   384 | mod_emo_detect_data_0384 |
 2026-05-09 20:47:12.000 |   15 |  0 |  0.2 |            1 |   384 | mod_emo_detect_data_0384 |
Query OK, 12 row(s) in set (0.035326s)

加下我微信:13611161621, 约个时间远程让我们分析一下。

抱歉,这个项目无法远程调试,我先自己尝试本地复现下现象再跟您联系