TDengine 是否支持自动建表、自动创建超级表功能?
TDengine自动建表机制问题解答
功能支持说明
TDengine完全支持自动建表机制,你不需要预先手动创建子表,就能直接通过INSERT语句插入数据触发自动建表。
该机制基于超级表(STable)实现,你只需要提前创建好业务对应的超级表,插入数据时在INSERT语句中补充USING和TAGS子句即可,示例语句如下:
-- 前提:已提前创建超级表 meters,schema为 ts TIMESTAMP, voltage FLOAT, current FLOAT,标签为 area NCHAR(20), groupId INT INSERT INTO d1001 USING meters TAGS('Beijing', 2) VALUES('2024-01-01 00:00:00', 220, 12.5);
如果d1001子表不存在,执行上述语句时会自动基于meters的schema创建该子表,同时写入对应数据。
注意:如果直接向不存在的表执行不带USING子句的INSERT语句,会抛出表不存在的报错,无法触发自动建表。
对应使用限制
- 自动建表必须绑定已存在的超级表,
INSERT语句中必须携带USING <超级表名> TAGS(...)子句,不能凭空创建不属于任何超级表的普通表。 - 自动创建的子表的时序字段schema完全继承所属超级表,不支持自定义字段数量、字段类型;标签的数量、类型也必须和超级表的标签定义完全匹配,标签值不能超出对应类型的长度、取值范围限制。
- 插入数据时如果子表已存在,语句传入的标签值必须和该子表已有标签值完全一致,否则会触发报错,不会自动修改已有子表的标签属性。
- 自动建表不支持自定义表的存储策略、副本数、TTL等属性,创建的子表会默认继承所属超级表的全部配置参数,有自定义属性需求的场景需要提前手动创建子表。
- 2.0以下的早期非正式版本不支持该特性,需要升级到2.0及以上稳定版才可使用。
内容的提问来源于stack exchange,提问作者GeorgeWill93
相关产品推荐
相关产品推荐

