创建虚拟子表失败语法错误syntax error

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

【TDengine 版本】

3.3.6.13

【操作系统以及版本】

ubuntu 22.04

【部署方式】

容器部署

【集群节点数】

【集群副本数】

【描述业务影响】

【问题复现路径/shan】

执行下列SQL语句

1 创建超级表(执行正常)

CREATE STABLE IF NOT EXISTS pm_kpi.s_pm_measdata (start_time TIMESTAMP, end_time TIMESTAMP, frequency INT, me_value DOUBLE) TAGS (ne_id INT, moi_id VARCHAR(128), me_key VARCHAR(64)) COMMENT ‘PM性能数据表’;

2 创建子表(执行正常)

CREATE TABLE IF NOT EXISTS pm_kpi.t_pm_measdata_10_GNB_12353_gnb_cpuavg USING pm_kpi.s_pm_measdata TAGS (10,‘GNB_12353’,‘gnb_cpuavg’);

CREATE TABLE IF NOT EXISTS pm_kpi.t_pm_measdata_10_GNB_12353_gnb_cpumax USING pm_kpi.s_pm_measdata TAGS (10,‘GNB_12353’,‘gnb_cpumax’);

3 批量迁移旧表数据到新子表(执行正常)

INSERT INTO pm_kpi.t_pm_measdata_10_GNB_12353_gnb_cpuavg (start_time, end_time, frequency, me_value) SELECT start_time, end_time, frequency, gnb_cpuavg FROM pm_kpi.s_measdata_nbs3907d_gnbcpustatic WHERE ne_id = 10 and moi_id = ‘GNB_12353’;

INSERT INTO pm_kpi.t_pm_measdata_10_GNB_12353_gnb_cpumax (start_time, end_time, frequency, me_value) SELECT start_time, end_time, frequency, gnb_cpumax FROM pm_kpi.s_measdata_nbs3907d_gnbcpustatic WHERE ne_id = 10 and moi_id = ‘GNB_12353’;

4 创建虚拟超级表(执行正常)

CREATE STABLE IF NOT EXISTS pm_kpi.vs_measdata_nbs3907d_gnbcpustatic (
start_time TIMESTAMP,
end_time TIMESTAMP,
frequency INT,
gnb_cpuavg DOUBLE,
gnb_cpumax DOUBLE
) TAGS (ne_id INT, moi_id VARCHAR(128)) VIRTUAL 1;

5 创建虚拟子表(执行失败,语法错误)
CREATE VTABLE IF NOT EXISTS pm_kpi.vt_measdata_nbs3907d_gnbcpustatic_10_GNB_12353 (
start_time TIMESTAMP,
end_time TIMESTAMP FROM t_pm_measdata_10_GNB_12353_gnb_cpuavg.end_time,
frequency INT FROM t_pm_measdata_10_GNB_12353_gnb_cpuavg.frequency,
gnb_cpuavg DOUBLE FROM t_pm_measdata_10_GNB_12353_gnb_cpuavg.me_value,
gnb_cpumax DOUBLE FROM t_pm_measdata_10_GNB_12353_gnb_cpumax.me_value
) USING pm_kpi.vs_measdata_nbs3907d_gnbcpustatic (ne_id, moi_id) TAGS (10,‘GNB_12353’);

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

第 5 步创建虚拟子表时报告执行失败,语法错误

错误信息:

SQL 错误 [9728]: TDengine ERROR (0x2600): sql: CREATE VTABLE IF NOT EXISTS pm_kpi.vt_measdata_nbs3907d_gnbcpustatic_10_GNB_12353 (
start_time TIMESTAMP,
end_time TIMESTAMP FROM pm_kpi.t_pm_measdata_10_GNB_12353_gnb_cpuavg.end_time,
frequency INT FROM pm_kpi.t_pm_measdata_10_GNB_12353_gnb_cpuavg.frequency,
gnb_cpuavg DOUBLE FROM pm_kpi.t_pm_measdata_10_GNB_12353_gnb_cpuavg.me_value,
gnb_cpumax DOUBLE FROM pm_kpi.t_pm_measdata_10_GNB_12353_gnb_cpumax.me_value
) USING pm_kpi.vs_measdata_nbs3907d_gnbcpustatic (ne_id, moi_id) TAGS (10,‘GNB_12353’), desc: syntax error near “using pm_kpi.vs_measdata_nbs3907d_gnbcpustatic (ne_id, moi_id) tags (10,‘GNB_12353’)”
TDengine ERROR (0x2600): sql: CREATE VTABLE IF NOT EXISTS pm_kpi.vt_measdata_nbs3907d_gnbcpustatic_10_GNB_12353 (
start_time TIMESTAMP,
end_time TIMESTAMP FROM pm_kpi.t_pm_measdata_10_GNB_12353_gnb_cpuavg.end_time,
frequency INT FROM pm_kpi.t_pm_measdata_10_GNB_12353_gnb_cpuavg.frequency,
gnb_cpuavg DOUBLE FROM pm_kpi.t_pm_measdata_10_GNB_12353_gnb_cpuavg.me_value,
gnb_cpumax DOUBLE FROM pm_kpi.t_pm_measdata_10_GNB_12353_gnb_cpumax.me_value
) USING pm_kpi.vs_measdata_nbs3907d_gnbcpustatic (ne_id, moi_id) TAGS (10,‘GNB_12353’), desc: syntax error near “using pm_kpi.vs_measdata_nbs3907d_gnbcpustatic (ne_id, moi_id) tags (10,‘GNB_12353’)”
TDengine ERROR (0x2600): sql: CREATE VTABLE IF NOT EXISTS pm_kpi.vt_measdata_nbs3907d_gnbcpustatic_10_GNB_12353 (
start_time TIMESTAMP,
end_time TIMESTAMP FROM pm_kpi.t_pm_measdata_10_GNB_12353_gnb_cpuavg.end_time,
frequency INT FROM pm_kpi.t_pm_measdata_10_GNB_12353_gnb_cpuavg.frequency,
gnb_cpuavg DOUBLE FROM pm_kpi.t_pm_measdata_10_GNB_12353_gnb_cpuavg.me_value,
gnb_cpumax DOUBLE FROM pm_kpi.t_pm_measdata_10_GNB_12353_gnb_cpumax.me_value
) USING pm_kpi.vs_measdata_nbs3907d_gnbcpustatic (ne_id, moi_id) TAGS (10,‘GNB_12353’), desc: syntax error near “using pm_kpi.vs_measdata_nbs3907d_gnbcpustatic (ne_id, moi_id) tags (10,‘GNB_12353’)”

【资源配置】

【报错完整截图】

好的 我们看下

根据语法,

虚拟子表不需要指定列类型。

我试过不加类型也是语法错误,比如改为如下语句

CREATE VTABLE IF NOT EXISTS pm_kpi.vt_measdata_nbs3907d_gnbcpustatic_10_GNB_12353 (

start_time TIMESTAMP,

end_time **FROM** pm_kpi.t_pm_measdata_10_GNB_12353_gnb_cpuavg.end_time,

frequency **FROM** pm_kpi.t_pm_measdata_10_GNB_12353_gnb_cpuavg.frequency,

gnb_cpuavg **FROM** pm_kpi.t_pm_measdata_10_GNB_12353_gnb_cpuavg.me_value,

gnb_cpumax **FROM** pm_kpi.t_pm_measdata_10_GNB_12353_gnb_cpumax.me_value

) USING pm_kpi.vs_measdata_nbs3907d_gnbcpustatic (ne_id, moi_id) TAGS (10,‘GNB_12353’);

CREATE VTABLE IF NOT EXISTS pm_kpi.vt_measdata_nbs3907d_gnbcpustatic_10_GNB_12353 (

start_time **FROM** pm_kpi.t_pm_measdata_10_GNB_12353_gnb_cpuavg.start_time,

end_time **FROM** pm_kpi.t_pm_measdata_10_GNB_12353_gnb_cpuavg.end_time,

frequency **FROM** pm_kpi.t_pm_measdata_10_GNB_12353_gnb_cpuavg.frequency,

gnb_cpuavg **FROM** pm_kpi.t_pm_measdata_10_GNB_12353_gnb_cpuavg.me_value,

gnb_cpumax **FROM** pm_kpi.t_pm_measdata_10_GNB_12353_gnb_cpumax.me_value

) USING pm_kpi.vs_measdata_nbs3907d_gnbcpustatic (ne_id, moi_id) TAGS (10,‘GNB_12353’);

SQL 错误 [9728]: TDengine ERROR (0x2600): sql: CREATE VTABLE IF NOT EXISTS pm_kpi.vt_measdata_nbs3907d_gnbcpustatic_10_GNB_12353 (
start_time TIMESTAMP,
end_time FROM pm_kpi.t_pm_measdata_10_GNB_12353_gnb_cpuavg.end_time,
frequency FROM pm_kpi.t_pm_measdata_10_GNB_12353_gnb_cpuavg.frequency,
gnb_cpuavg FROM pm_kpi.t_pm_measdata_10_GNB_12353_gnb_cpuavg.me_value,
gnb_cpumax FROM pm_kpi.t_pm_measdata_10_GNB_12353_gnb_cpumax.me_value
) USING pm_kpi.vs_measdata_nbs3907d_gnbcpustatic (ne_id, moi_id) TAGS (10,‘GNB_12353’), desc: syntax error near “from pm_kpi.t_pm_measdata_10_gnb_12353_gnb_cpuavg.end_time,
frequency from pm_kpi.t_pm_measdata_10_gnb_12353_gnb_cpuavg.frequency,
gnb_cpuavg from pm_kpi.t_pm_measdata_10_gnb_12353_gnb_cpuavg.me_value,
gnb_cpumax from pm_kpi.t_pm_measdata_10_gnb_12353_gnb_cpumax.me_value
) using pm_kpi.vs_measdata_nbs3907d_gnbcpustatic (ne_id, moi_id) tags (10,‘GNB_12353’)”
TDengine ERROR (0x2600): sql: CREATE VTABLE IF NOT EXISTS pm_kpi.vt_measdata_nbs3907d_gnbcpustatic_10_GNB_12353 (
start_time TIMESTAMP,
end_time FROM pm_kpi.t_pm_measdata_10_GNB_12353_gnb_cpuavg.end_time,
frequency FROM pm_kpi.t_pm_measdata_10_GNB_12353_gnb_cpuavg.frequency,
gnb_cpuavg FROM pm_kpi.t_pm_measdata_10_GNB_12353_gnb_cpuavg.me_value,
gnb_cpumax FROM pm_kpi.t_pm_measdata_10_GNB_12353_gnb_cpumax.me_value
) USING pm_kpi.vs_measdata_nbs3907d_gnbcpustatic (ne_id, moi_id) TAGS (10,‘GNB_12353’), desc: syntax error near “from pm_kpi.t_pm_measdata_10_gnb_12353_gnb_cpuavg.end_time,
frequency from pm_kpi.t_pm_measdata_10_gnb_12353_gnb_cpuavg.frequency,
gnb_cpuavg from pm_kpi.t_pm_measdata_10_gnb_12353_gnb_cpuavg.me_value,
gnb_cpumax from pm_kpi.t_pm_measdata_10_gnb_12353_gnb_cpumax.me_value
) using pm_kpi.vs_measdata_nbs3907d_gnbcpustatic (ne_id, moi_id) tags (10,‘GNB_12353’)”
TDengine ERROR (0x2600): sql: CREATE VTABLE IF NOT EXISTS pm_kpi.vt_measdata_nbs3907d_gnbcpustatic_10_GNB_12353 (
start_time TIMESTAMP,
end_time FROM pm_kpi.t_pm_measdata_10_GNB_12353_gnb_cpuavg.end_time,
frequency FROM pm_kpi.t_pm_measdata_10_GNB_12353_gnb_cpuavg.frequency,
gnb_cpuavg FROM pm_kpi.t_pm_measdata_10_GNB_12353_gnb_cpuavg.me_value,
gnb_cpumax FROM pm_kpi.t_pm_measdata_10_GNB_12353_gnb_cpumax.me_value
) USING pm_kpi.vs_measdata_nbs3907d_gnbcpustatic (ne_id, moi_id) TAGS (10,‘GNB_12353’), desc: syntax error near “from pm_kpi.t_pm_measdata_10_gnb_12353_gnb_cpuavg.end_time,
frequency from pm_kpi.t_pm_measdata_10_gnb_12353_gnb_cpuavg.frequency,
gnb_cpuavg from pm_kpi.t_pm_measdata_10_gnb_12353_gnb_cpuavg.me_value,
gnb_cpumax from pm_kpi.t_pm_measdata_10_gnb_12353_gnb_cpumax.me_value
) using pm_kpi.vs_measdata_nbs3907d_gnbcpustatic (ne_id, moi_id) tags (10,‘GNB_12353’)”

按照陈老师指导,去掉类型去掉时间戳列start_time后,创建成功了,感谢陈老师支持。

修改后正确的sql如下:

CREATE VTABLE IF NOT EXISTS pm_kpi.vt_measdata_nbs3907d_gnbcpustatic_10_GNB_12353 (
	end_time FROM pm_kpi.t_pm_measdata_10_GNB_12353_gnb_cpuavg.end_time,
	frequency FROM pm_kpi.t_pm_measdata_10_GNB_12353_gnb_cpuavg.frequency,
	gnb_cpuavg FROM pm_kpi.t_pm_measdata_10_GNB_12353_gnb_cpuavg.me_value,
	gnb_cpumax FROM pm_kpi.t_pm_measdata_10_GNB_12353_gnb_cpumax.me_value
) USING pm_kpi.vs_measdata_nbs3907d_gnbcpustatic (ne_id, moi_id) TAGS (10,'GNB_12353');

此话题已在最后回复的 10 天后被自动关闭。不再允许新回复。