2014-10-06 38 views
3

我有,我需要在分区使用ROW_NUMBER()的使用情况: 喜欢的东西:ROW_NUMBER()OVER在因帕拉

SELECT 
    Column1 , Column 2 
    ROW_NUMBER() OVER (
    PARTITION BY ACCOUNT_NUM 
    ORDER BY FREQ, MAN, MODEL) as LEVEL 
FROM 
    TEST_TABLE 

我需要在因帕拉解决类似的问题。不幸的是,Impala不支持子查询,也不支持ROW_NUMBER()OVER功能。 谢谢你的帮助。

+3

帕拉将同时支持分析窗函数(包括ROW_NUMBER()),以及在即将到来的2.0版本相关子查询。 – Matt 2014-10-06 20:17:47

回答

4

对于此类查询,Impala非常有限。随着一些假设,这个查询是可能的:

  • 分区子句中的四列从来NULL
  • 分区子句中的四列唯一标识一行

查询是相当丑陋和昂贵的:

select tt.column1, tt.column2, count(*) as level 
from test_table tt join 
    test_table tt2 
    on tt.account_num = tt2.account_num and 
     (tt2.freq < tt.freq or 
     tt2.freq = tt.freq and tt2.man < t.man or 
     tt2.freq = tt.freq and tt2.man = t.man and tt2.model <= t.model 
     ) 
group by tt.column1, tt.column2, tt.account_num, tt.freq, tt.man, tt.model; 
相关问题