【TDengine 版本】
3.4.0.0
【遇到的问题:问题现象及影响】
如题,下面是超级表的表结构:
CREATE STABLE IF NOT EXISTS yiqi.transmit_log ( ts TIMESTAMP, status BOOL, compress BOOL, content BLOB) TAGS ( tenant_code binary(64), group_id binary(64) );
当使用如下sql向这个超级表中插入数据的时候,插入的两个tag是【abcd,abcd】,但是查询出来的tag却是【test,test】(content字段存储的是byte数组,为了便于展示在帖子中写成字符串)
INSERT INTO yiqi.abcd using yiqi.transmit_log TAGS ('abcd','abcd') VALUES ('2026-02-28 16:38:49.125',false,false,'比特数组')
备注:遇到过很多次这种情况,之前插入成功过tag是【test, test】的数据,其他的表也遇到过这种问题,新插入的数据tag变成了以前插入成功数据的tag
如果这个子表是 已经存在了的,那么这次是不会再创建子表,而只是插入数据了。
所以,你遇到的这种情况,只能是 子表已经存在了。
我有点没太理解,每个子表中的tag数据都必须是相同的?那tag存在的意义是什么,直接用子表名称就可以了。tag不是用来过滤数据的嘛?
举个列子说明一下,比如:子表A已经存在的了,他的tag设置为了 ‘a1‘(假设就一个tag),那么如果在使用
insert into A using stableName (‘a2’) values (); 这样插入数据的时候,tag 值不会变成a2,还是 a1,但会将数据写入。即不会再创建子表,包括tag 也不会变,只会插入数据了。
也就是说每个子表中所有数据的tag都是一样的呗。那么tag的作用就是在不知道子表名称的时候,用来从超级表中筛选子表数据的,相当于是用来代替子表名称的,这么理解对吗?
能否给出具体的子表和tag的关联关系,感觉还是有些混乱,因为官方文档上只是提到可以使用tag来过滤数据,并没有说明tag和子表之间的关系。
每个子表的tag 值只是在第一次创建的时候,确定 tag 的值,然后就不会变化了(当然 alter命令可以进行修改 )。每个子表的tag值是静态的,只保存一份。
insert into t1 using transmit_log TAGS ( ‘aa’, ‘bb’) values (‘2026-01-01 08:00:00‘, 1);
执行这句的时候,会创建 子表 t1,两个tag值是 aa、 bb,并插入数据;
insert into t1 using transmit_log TAGS ( ‘cc’, ‘dd’) values (‘2026-01-01 098:00:00‘, 1);
执行这句时候,t1已经存在了,即不会再创建,所以t1的tag 值不会变,仍然是 aa、bb,但会插入数据。