Боковой вид в улье - PullRequest
       29

Боковой вид в улье

0 голосов
/ 29 января 2020

Мне нужно разместить код под case :

select
count (*)
from db.tab1
lateral view explode(secondary.tertiary) exp as lv
where id IN ('6','1') and array_contains (lv.ci, "1");

Я пробовал:

select 
  sum(
    case 
      when id IN ('6','1') 
          and array_contains ((lateral view explode(secondary.tertiary)).ci, "1") 
      then 1 
      else 0 
   end) 
from db.tab1;

Но получаю ошибку.

1 Ответ

0 голосов
/ 29 января 2020
select
  count(*),
  sum(if(..., 1, 0))
from db.tab1
  lateral view explode(secondary.tertiary) exp as lv
;

Для предоставленных SQL в таблице tab1 фактический лог c выглядит следующим образом:

  1. Разнесение поля secondary.tertiary, псевдоним его как lv, что результаты во временном наборе результатов (таблица) tab2;
  2. Операция, подобная соединению, для объединения полей tab2 обратно в строки в tab1, что приводит к другой промежуточной таблице tab3;
  3. Выберите из tab3, к которому применяются условия where.
...