Перестройте запрос в Impala / Hive, который использует подзапрос для создания нового столбца в таблице. - PullRequest
1 голос
/ 14 апреля 2020

Я конвертирую SQL запрос в Импалу. Запрос SQL использует подзапрос в select для создания нового столбца и выглядит следующим образом-

select *, (select min(day)
           from date_series 
           where day > t.work_day) as next_work_day
from table1 t

Однако Impala не поддерживает подзапрос в select для создания нового столбца, и этот запрос не выполняется. Могу ли я получить помощь, чтобы переписать этот запрос так, как Impala может выполнить.

Цель запроса: найти следующий рабочий день для столбца work_day.

Таблица1 является внешней таблицей и содержит

table1 contains 4 columns including the work day column

date_series contains all working dates stating from 2019-06-18 to current_day + 5 как

   2019-06-20
   2019-06-21
   2019-06-24
   .
   .

Ответы [ 2 ]

1 голос
/ 14 апреля 2020

Я думаю, вы можете сделать это:

select t.*, ds.next_day
from table1 t left join
     (select ds.*, lead(day) over (order by day) as next_day
      from date_series ds
     ) ds
     on t.current_work_day >= ds.day and
        (t.current_work_day < ds.next_day or ds.next_day is null);
0 голосов
/ 14 апреля 2020

Вы можете переписать ваш запрос следующим образом

select 
    t.*,
    work_day 
from table1 t 
join (
    select 
        min(day) as work_day 
    from date_series
) ds
on t.current_work_day = ds.work_day

where ds.work_day > t.current_work_day
...