2014-10-06 4 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. К сожалению, Impala не поддерживает подзапросы, а также не поддерживает функциональные возможности ROW_NUMBER() OVER. Благодарим вас за помощь.

+3

Impala будет поддерживать как аналитические функции окна (в том числе ROW_NUMBER()), а также коррелированных подзапросов в предстоящем выпуске 2.0. – Matt

ответ

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; 
Смежные вопросы