You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 07:04:55