从横向视图转换为配置单元中的 case 语句
Convert from lateral view to case statements in hive
我需要在 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;
但是出现错误。
select
count(*),
sum(if(..., 1, 0))
from db.tab1
lateral view explode(secondary.tertiary) exp as lv
;
对于tabletab1
上提供的SQL,实际逻辑是这样的:
- 分解字段
secondary.tertiary
,将其别名为 lv
,这会产生一个临时结果集 (table) tab2
;
- 一个类似连接的操作,将
tab2
的字段连接回 tab1
中的行,从而产生另一个中间 table tab3
;
- Select 来自
tab3
,where
条件适用。
我需要在 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;
但是出现错误。
select
count(*),
sum(if(..., 1, 0))
from db.tab1
lateral view explode(secondary.tertiary) exp as lv
;
对于tabletab1
上提供的SQL,实际逻辑是这样的:
- 分解字段
secondary.tertiary
,将其别名为lv
,这会产生一个临时结果集 (table)tab2
; - 一个类似连接的操作,将
tab2
的字段连接回tab1
中的行,从而产生另一个中间 tabletab3
; - Select 来自
tab3
,where
条件适用。