Я пытаюсь присвоить статус на основе количества идентификаторов, используя метрику c. Это запрос, который я написал (и он работает):
select
x.yyyy_mm_dd,
x.prov_id,
x.app,
x.metric,
x.is_100,
case
when ((x.is_100 = 'true') or size(collect_set(x.list)) >10) then 'implemented'
when ((x.is_100 = 'false') and size(collect_set(x.list)) between 1 and 10) then 'first contact'
else 'no contact'
end as impl_status,
size(collect_set(x.list)) as array_size,
collect_set(x.list) as list
from(
select
yyyy_mm_dd,
prov_id,
app,
metric,
is_100,
list
from
my_table
lateral view explode(ids) e as list
) x
group by
1,2,3,4,5
Однако impl_status неверно для второго условия в операторе case. В результирующем наборе я вижу строки с is_100 = false, array_size от 1 до 10, однако impl_status в итоге оказывается «без контакта» вместо «первого контакта». Я думал, может быть, между не включается, но, похоже, в соответствии с документами.