Apache IoTDB带连字符标识符:后续SQL操作是否需保留双引号?
Apache IoTDB 2.0.8 带连字符标识符的使用问题
背景
使用Apache IoTDB 2.0.8构建表模型,需沿用上游系统的连字符命名(如sensor-reading、air-temp),无法修改为下划线格式。
未加引号创建表的错误
直接使用带连字符的名称创建表时触发语法错误:
CREATE TABLE sensor-reading (device_id STRING TAG, temperature DOUBLE FIELD);
报错信息:
Msg: org.apache.iotdb.jdbc.IoTDBSQLException: 700: line 1:20: mismatched input '-'. Expecting: '(', '.'
双引号包裹的可行方案
使用双引号包裹带特殊字符的标识符后,所有SQL操作均可正常执行:
CREATE TABLE "sensor-reading" (device_id STRING TAG, "air-temp" DOUBLE FIELD); INSERT INTO "sensor-reading"(`time`, device_id, "air-temp") VALUES (1000, 'S1', 21.5); SELECT `time`, device_id, "air-temp" FROM "sensor-reading";
查询结果输出:
+-----------------------------+---------+--------+ | `time`|device_id|air-temp| +-----------------------------+---------+--------+ |1970-01-01T08:00:01.000+08:00| S1| 21.5| +-----------------------------+---------+--------+
问题解答
1. 后续INSERT/SELECT操作是否必须保留双引号?
是的,必须保留双引号。IoTDB会将未用双引号包裹的sensor-reading解析为sensor减reading的算术表达式,而非表名;同理,air-temp会被解析为字段air减字段temp,导致语法错误或逻辑错误。只有用双引号包裹,IoTDB才会将其识别为完整的标识符。
2. 有没有其他方式引用带连字符的名称?
在IoTDB 2.0.8版本中,没有其他替代方式。根据官方SQL语法规范,双引号是唯一用于包裹包含特殊字符(连字符、空格等)或需区分大小写标识符的语法。
内容的提问来源于stack exchange,提问作者yana shen
相关产品推荐
相关产品推荐

