Это самое близкое, что я могу сделать, чтобы сделать его родовым, так как добавляются новые столбцы, вам нужно только внести изменения в CONCAT () внутри карта ()
select pos1+1 AS rollnum,mat,eng from(
select collect_list(a.group_map['MATHS']) as MATHS,
collect_list(a.group_map['ENGLISH']) as ENGLISH,
from ( select map(SUBJECT,CONCAT(ROLL1,',',ROLL2,',',ROLL3,',',ROLL4,',',
ROLL5,',',ROLL6)) as group_map
from db_name.tbl_name) a) b
lateral view posexplode(split(b.MATHS[0],',')) MATHS AS pos1,mat
lateral view posexplode(split(b.ENGLISH[0],',')) ENGLISH AS pos2,eng
WHERE pos1=pos2
Хотя это может несколько повлиять на эффективность.