У меня есть требование, чтобы столбцы со значениями были транспонированы в строки. Например, обратитесь к таблице ниже:
cust:
cust_id | cover1 | cover2 | cover3
1234 | 'PAG' | Null | 'TDE'
5678 | Null | 'GAP' | Null
Учитывая приведенную выше таблицу, мы должны выяснить, какие столбцы имеют значение, и если в этом столбце есть значение, тодолжен быть создан ряд. Например,
cust_id | cover
1234 | 'PAG'
1234 | 'TDE'
5678 | 'GAP'
Для клиента 1234
заполняется только cover1 and cover 3
, следовательно, будет создано 2
записей. Поскольку 5678
cover1 & cover2
являются значениями Null, следовательно, необходимо создать только запись 1
для cover_3
.
Я мог бы применить простой подход, как показано ниже. Но мне было интересно, есть ли элегантный подход и более разумное решение для этого.
select cust_id, cover1 AS cover where cover1 IS Not Null
UNION ALL
select cust_id, cover2 AS cover where cover2 IS Not Null
UNION ALL
select cust_id, cover3 AS cover where cover3 IS Not Null
Пожалуйста, поделитесь своими мыслями. Мы используем Spark-SQL 2.4
Спасибо