Hive поддерживает substring_index()
, так что вы можете сделать:
select sum(case when payload like 'Shoes%'
then substring_index(payload, ' = ', -1)
else 0
end) as num_shoes,
sum(case when payload like 'Hats%'
then substring_index(payload, ' = ', -1)
else 0
end) as num_hats
from (select t.*,
row_number() over (partition by user, payload, substring_index(filename, '/', -1)
order by user
) as seqnum
from t
) t
where seqnum = 1;
Я настоятельно рекомендую вам изменить модель данных, а не сохранять полезную нагрузку в виде строки. Числа должны быть сохранены как числа. Имена должны храниться как имена. Их не следует объединять в строку, если этого можно избежать.