在 impala/hive 上将单行转换为 2 行

convert a single row into 2 rows on impala/hive

我有一个巨大的 table,其中包含以下格式的数百万 rows/IDs。

ID  date    bor1_key        bor1_fico04    bor1_fico08  bor2_key        bor2_fico04 bor2_fico08
A   202109  00657B187TH8    800            832          07T5O90Y009T    789         823

我需要将其转换为以下格式,以便值位于 2 行中,如下所示。

ID  date    rownum  key             fico04  fico08
A   202109  2       07T5O90Y009T    789     823
A   202109  1       00657B187TH8    800     832

你能帮我查询 impala/hive 来解决这个问题吗?非常感谢。

我认为一种方法是:

select
  d.ID, d.date, n.n as rownum,
  case 
    when n.n = 1 then d.bor1_key
    else d.bor2_key
  end as key,
  case 
    when n.n = 1 then d.bor1_fico04
    else d.bor2_fico04
  end as fico04,
  case 
    when n.n = 1 then d.bor1_fico08
    else d.bor2_fico08
  end as fico08    
from your_data d
  /* duplicate the results */
  left join (select 1 as n union all select 2 as n) n
    on 1=1