Open ipaddicting opened 1 week ago
另外,3.3.3.0 版本测试结果如下:
taos> SELECT COUNT(*) AS total FROM taosd_cluster_info;
total |
========================
8 |
Query OK, 1 row(s) in set (0.002362s)
taos> SELECT COUNT(*) AS "total_sth" FROM taosd_cluster_info;
DB error: syntax error near ""total_sth" from taosd_cluster_info;" (0.000087s)
COUNT
函数已支持 Alias,但函数别名 AS
依旧不支持单双引号。
根本原因在于 AS
不支持单双引号,与函数使用无关:
taos> SELECT _ts AS time FROM taosd_cluster_info LIMIT 10;
time |
==========================
2024-11-18 02:40:51.591 |
2024-11-18 02:41:21.595 |
2024-11-18 02:41:51.782 |
2024-11-18 02:42:21.983 |
2024-11-18 02:42:51.983 |
2024-11-18 02:43:22.018 |
2024-11-18 02:43:52.126 |
2024-11-18 02:44:22.275 |
2024-11-18 02:44:52.399 |
2024-11-18 02:45:22.480 |
Query OK, 10 row(s) in set (0.004828s)
taos> SELECT _ts AS 'time' FROM taosd_cluster_info LIMIT 10;
DB error: syntax error near "'time' from taosd_cluster_info limit 10;" (0.000082s)
1001 |
Query OK, 1 row(s) in set (0.003325s)
total
FROM meters;
total | 1001 |
Query OK, 1 row(s) in set (0.006529s)
不用引号,用的话使用反引号。
单纯使用 SQL 来讲的话都好解决,但是通过 SQLAlchemy 与其他第三方应用如 Superset 集成的时候就存在该兼容性问题,因为大部分 SQL 数据库都支持 AS
使用单双引号。
当然我也可以在 taospy 中做兼容处理,比如将单双引号统一替换成反引号,但总觉得还是符合主流操作更为合理一些。
mysql 可以这样写对吗。
或者其它关系型库
是的,没找到官方文档,但是应该是默认支持:
目前我是通过在 Superset 中自定义的 TDengineEngineSpec 来处理兼容性问题:
class TDengineEngineSpec(BaseEngineSpec):
engine = 'taosrest'
engine_name = 'TDengine'
_time_grain_expressions = {
None: "{col}",
"PT1S": "TIMETRUNCATE({col}, 1s, 0)",
"PT1M": "TIMETRUNCATE({col}, 1m, 0)",
"PT1H": "TIMETRUNCATE({col}, 1h, 0)",
"P1D": "TIMETRUNCATE({col}, 1d, 0)",
"P1W": "TIMETRUNCATE({col}, 1w, 0)",
}
@classmethod
def execute(
cls,
cursor: Any,
query: str,
database: Database,
**kwargs: Any,
) -> None:
query = re.sub(r'\s*(?i:AS)\s+[\'"]([^\'"]+)[\'"]', r' AS `\1`', query)
super().execute(cursor, query, database, **kwargs)
Bug Description Aliases 即
AS
存在兼容性问题:首先,
AS
不支持单双引号,即"
和'
去除
'
或"
后仅支持简单字符,但存在歧义:不支持单双引号导致与其他软件如 Superset 存在兼容问题:
其次,
COUNT
函数无法使用AS
,报错如下:移除
AS
可正常查询:To Reproduce 参考以上 SQL 语句。
Expected Behavior
AS
需支持单双引号;AS
可以与COUNT
函数共同使用。Environment (please complete the following information):
Additional Context 目前我正在尝试将 taospy 集成进 Superset 的过程中,相关代码会在集成验证完成后提交 taospy 以及 Superset 合并,谢谢。