在 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)?
Hive Joins 可以在 Apache Nifi 中实现吗?