横向视图在配置单元sql中分解,属性int指向一条记录

vkc1a9a2  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(294)

我有一张这样的table。日期(字符串)、路径(字符串)、转换(int)

|------------|------------|---------------------|-------------|
|     Date   |  cust_id   |         Path        | Conversions |
|------------|------------|---------------------|-------------|
| 2020-01-01 |    1234    | page1, page2, page3 |      1      |
| 2020-01-01 |    4567    | page5, page4, page2 |      0      |
| 2020-01-01 |    8910    | page4, page3, page1 |      2      |
|------------|------------|---------------------|-------------|

我要做的是将path字段分解成行,同时将转换数保持为同一行,用null填充其余的行,请参见下面的内容。

|------------|------------|-------|-------------|
|     Date   |  cust_id   | Path  | Conversions |
|------------|------------|-------|-------------|
| 2020-01-01 |    1234    | page1 |      1      |
| 2020-01-01 |    1234    | page2 |    null     |
| 2020-01-01 |    1234    | page3 |    null     |
| 2020-01-01 |    4567    | page5 |      0      |
| 2020-01-01 |    4567    | page4 |    null     |
| 2020-01-01 |    4567    | page2 |    null     |
| 2020-01-01 |    8910    | page4 |      2      |
| 2020-01-01 |    8910    | page3 |    null     |
| 2020-01-01 |    8910    | page1 |    null     |
|------------|------------|-------|-------------|

不幸的是,当我以后查看explode时,我得到了所有行上重复的转换数。

|------------|------------|-------|-------------|
|     Date   |  cust_id   | Path  | Conversions |
|------------|------------|-------|-------------|
| 2020-01-01 |    1234    | page1 |      1      |
| 2020-01-01 |    1234    | page2 |      1      |
| 2020-01-01 |    1234    | page3 |      1      |
| 2020-01-01 |    4567    | page5 |      0      |
| 2020-01-01 |    4567    | page4 |      0      |
| 2020-01-01 |    4567    | page2 |      0      |
| 2020-01-01 |    8910    | page4 |      2      |
| 2020-01-01 |    8910    | page3 |      2      |
| 2020-01-01 |    8910    | page1 |      2      |
|------------|------------|-------|-------------|

有什么想法吗?

gstyhher

gstyhher1#

如果你需要的话 Conversions 要仅为第一个数组元素填充,请使用 posexplode 如果位置=0,则赋值,否则为空:

select t.`Date`,
       t.cust_id,
       case when e.pos=0 then t.Conversions end Conversions --NULL for pos>0
from mytable t
lateral view posexplode(Path) e as pos, path

相关问题