Vertica中是否存在ClickHouse any函数的等效快速实现?
Vertica中类似ClickHouse ANY()的替代方案
- Vertica没有直接对应ClickHouse
ANY()的内置函数,但有两种比MAX()/MIN()更高效的替代方式,能实现“返回组内任意一个值、结果不确定”的需求:FIRST_VALUE()/LAST_VALUE():
这两个窗口函数可以快速获取分组内任意一行的指定列值,无需全组扫描计算极值。示例语法:
如果不需要指定取值顺序,可以省略SELECT id, MAX(value1), FIRST_VALUE(value2) OVER (PARTITION BY id) AS any_value2 FROM scheme.table GROUP BY id;ORDER BY子句,此时函数会返回组内随机一行的value2,行为和ClickHouse的ANY()完全一致,且执行效率更高。ARRAY_AGG()取首元素:
将组内value2聚合为数组后直接取第一个元素,这种方式在大数据量场景下性能表现优异:
注意:Vertica的数组下标从0开始,取首元素即可得到组内任意一个SELECT id, MAX(value1), ARRAY_AGG(value2)[0] AS any_value2 FROM scheme.table GROUP BY id;value2值。
这两种方法都避免了MAX()/MIN()的全组比较逻辑,执行速度更快,完全满足你的需求。
内容的提问来源于stack exchange,提问作者Ivan Shabashov
相关产品推荐
相关产品推荐

