在 Apache Impala 中实现 Oracle 的 rownum()

Posted

技术标签:

【中文标题】在 Apache Impala 中实现 Oracle 的 rownum()【英文标题】:Implementing Oracle's rownum() in Apache Impala 【发布时间】:2021-12-29 11:16:39 【问题描述】:

我正在将 Oracle 查询转换为 Impala 等效项。我有一个这样的 Oracle 查询:

select c1, c2 from t1 
where rownum <= (select c3 from t2 where c4 = 'Some string' and c5 = 'some string')
and c2 in (1,2,3) order by c3 asc;

但是 Impala 不支持我在研究时了解到的 rownum()。请帮助我在 Impala 中实现这一点。

提前谢谢你。

【问题讨论】:

【参考方案1】:

你在 oracle 中没有类似 rownum 的东西。但是,您可以使用 row_number() over (partition by col, order by col) 函数创建一个伪列。您需要避免按子句进行分区。 您可以更改 sql 并添加子查询来计算 rownum 列,如下所示。 此外,您需要更改您的查询,以便它在 impala 中使用 join 而不是您上面编写的方式工作。

select c1, c2, c3 from 
(select c1,c2, row_number() over (order by c1) as rownum from t1 ) t1
join (select c3 from t2 where c4 = 'Some string' and c5 = 'some string')
and c2 in (1,2,3)) t2 on
rownum<=t2.c3  
order by c3 asc;

【讨论】:

【参考方案2】:

根据documentation,您可以按原样使用Impala 的row_number。 这意味着如果您尝试这种方式,您的查询将成功执行:

select column from table
where row_number = 1;

【讨论】:

对不起,我认为没有这样的系统功能。您需要计算列。 我没有可编译的环境来尝试Impala的row_number,但我试图解释它的文档,但是知道如何使用row_number()很好。 欢迎...您可以将demo.gethue.com/hue/editor?editor=358102 用于 hive(类似于 Impala):)

以上是关于在 Apache Impala 中实现 Oracle 的 rownum()的主要内容,如果未能解决你的问题,请参考以下文章

Apache Zeppelin 条件分支(IF/ELSE)?

如何在impala中编写java udf

如何在 Apache Spark 中实现递归算法?

Hive Joins 可以在 Apache Nifi 中实现吗?

如何在 Apache 中实现适用于所有虚拟主机的全局 RewriteCond / RewriteRule?

如何使用 Apache 2.4.23 在 CentOs Server 中实现 http2 (h2)?