繁体   English   中英

配置单元将行转列

[英]hive tranpose rows to columns

需要将列转置为行。

输入数据

我有预期的预定义列。 如果该记录存在,则在相应列中将列值填充为是,否则默认为否。

预期的列集如下:Col_A、Col_D、Col_X、Col_T、Col_M、Col_E

输出数据

如有任何问题,请告诉我

表格转置(输入数据)

+--------+---------+
| col_id | col_val |
+--------+---------+
| axc    | col_x   |
| bdf    | col_f   |
| cde    | col_x   |
| yhc    | col_b   |
| idx    | col_a   |
| dft    | col_y   |
+--------+---------+

转置 col_val 的 Hive 查询:

 SELECT a.col_id,IF(array_contains(collect_list(a.map_values['col_x']),'1'),'Y','N') AS col_x,
IF(array_contains(collect_list(a.map_values['col_y']),'1'),'Y','N') AS col_y,
IF(array_contains(collect_list(a.map_values['col_a']),'1'),'Y','N') AS col_a,
IF(array_contains(collect_list(a.map_values['col_b']),'1'),'Y','N') AS col_b,
IF(array_contains(collect_list(a.map_values['col_f']),'1'),'Y','N') AS col_f FROM (
       SELECT col_id,
              col_val,
              map(col_val, '1') map_values
       FROM   transpose) a GROUP BY a.col_id; 

结果

+--------+-------+-------+-------+-------+-------+
| col_id | col_x | col_y | col_a | col_b | col_f |
+--------+-------+-------+-------+-------+-------+
| axc    | Y     | N     | N     | N     | N     |
| bdf    | N     | N     | N     | N     | Y     |
| cde    | Y     | N     | N     | N     | N     |
| dft    | N     | Y     | N     | N     | N     |
| idx    | N     | N     | Y     | N     | N     |
| yhc    | N     | N     | N     | Y     | N     |
+--------+-------+-------+-------+-------+-------+

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM