如何在同一配置单元表中将行转换为两列

时间:2018-11-16 14:22:02

标签: hadoop hive

如何将行转换为同一配置单元表中的两列

这是表格:

 |ID  | type  | value |
 |id0 | ACC   | K0    |
 |id0 | PCC   | K2    |
 |id0 | PCC   | HZ    |
 |id0 | ABB   | MM    |
 |id0 | PBB   | L10   |
 |id1 | ACC   | M5    |
 |id1 | PBB   | 05    |

所有列都是字符串。我想以以下方式转置该表:“类型”列将被划分为仅第一个字母的列,而“类型”的其余部分的唯一值将成为新列,具有“值”列的值。 我正在尝试获取:

 |ID  | type1| CC | BB |
 |id0 | A    | K0 | MM |
 |id0 | P    | K2 | L10|
 |id0 | P    | HZ |    |
 |id1 | A    | M5 |    |
 |id1 | P    |    | 05 |

我使用Case语句创建列:

SELECT ID, 
substring(type,1,1) AS type1, 
CASE WHEN type LIKE '%CC' THEN value END AS CC, 
CASE WHEN type LIKE '%BB' THEN value END AS CAT
FROM tb1

但是我得到的行数却相同:

 |ID  |type1| CC  |BB  |
 |id0 | A   | K0  |NULL| 
 |id0 | P   | K2  |NULL|
 |id0 | P   | HZ  |NULL|
 |id0 | A   |NULL |MM  |
 |id0 | P   |NULL |L10 |
 |id1 | A   | M5  |NULL|
 |id1 | P   |NULL |05  |

如何减少行数。对于我的示例,在7行中,我可以得到5。

我使用了“ COLLECT_SET”,但我将所有值作为列表获取。

0 个答案:

没有答案