2014-10-06 57 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;