ClickHouse返回AMBIGUOUS_COLUMN_NAME错误,是否属于Bug?
这不是ClickHouse的Bug,是查询写法导致的列名冲突问题
问题原因
你在子查询中同时进行了两个操作:
- 将原表的
time(DateTime类型)转换为UInt64并重命名为time - 通过
test.time明确引用原表的time列
在ClickHouse 22.6.1版本中,当使用表名限定符引用原表的同名列时,原表的time列会被隐式加入子查询的结果集,导致子查询结果中出现两个同名但类型不同的time列:一个是原表的DateTime类型,另一个是转换后的UInt64类型。
无论是外层直接执行ORDER BY time,还是用WITH子句指定子查询后引用subquery.time,ClickHouse都会检测到结果集中存在结构冲突的同名列,从而触发AMBIGUOUS_COLUMN_NAME错误。
解决方法
方法1:给转换后的列更换别名
避免和原表列名重名,从根源上消除冲突:
SELECT * FROM ( SELECT toUInt64(time) AS converted_time, toHour(test.time) FROM test ) ORDER BY converted_time ASC
方法2:移除表限定符,直接引用列
计算toHour时不用test.限定,这样不会触发原表列被隐式带入结果集:
SELECT * FROM ( SELECT toUInt64(time) AS time, toHour(time) FROM test ) ORDER BY time ASC
内容的提问来源于stack exchange,提问作者Yu Wang
相关产品推荐
相关产品推荐

