【问题标题】:Implementing Oracle's rownum() in Apache Impala在 Apache Impala 中实现 Oracle 的 rownum()
【发布时间】: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 中实现这一点。

提前谢谢你。

【问题讨论】:

    标签: oracle 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):)
      猜你喜欢
      • 2017-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-26
      • 1970-01-01
      • 2014-04-05
      • 2019-05-24
      相关资源
      最近更新 更多