在Apache Drill中使用PostgreSQL的DISTINCT ON语法报错,如何解决?
Apache Drill中使用PostgreSQL语法的问题解答
Apache Drill的SQL方言基于ANSI SQL,并不支持PostgreSQL特有的DISTINCT ON语法,这就是你遇到解析报错的原因。
替代实现方案
如果需要实现类似PostgreSQL DISTINCT ON的「按指定列分组去重,保留每组内第一条记录」的逻辑,可以用Drill支持的窗口函数ROW_NUMBER()来模拟,示例代码如下:
SELECT gene FROM ( SELECT gene, -- 按gene分组,每组内按需求排序(这里用gene本身排序,可根据实际场景调整) ROW_NUMBER() OVER (PARTITION BY gene ORDER BY gene) AS rn FROM my.df.genes ) t WHERE rn = 1;
如果需要保留每组内特定顺序的记录(比如最新创建的、某个字段最大的),只需修改ORDER BY后的字段即可。
补充说明
Drill仅兼容ANSI SQL标准以及部分主流数据库的通用语法,像DISTINCT ON这类数据库专属的语法特性无法直接使用,必须用Drill支持的标准语法进行等价转换。
内容的提问来源于stack exchange,提问作者Fabrice
相关产品推荐
相关产品推荐

