我有一个像这样的Hive表
Created_date ID1 Name1 Age1 Gender1 Name2 ID2 Age2 Gender2 ID3 Name3 Age3 Gender3....
2014-02-01 1 ABC 21 M MNP 2 22 F 3 XYZ 25 M
2015-06-06 11 LMP 31 F PLL 12 42 M 13 UIP 37 F
此表可能没有。重复设置的4列对。这4列的顺序也没有修复,可能还有1或2个不重复的列,如created_date
我需要将上面的表转换为一个新的Hive表,其中只有4列ID,Name,Age和Gender,如下所示。我的结果表中不需要created_date列。
ID Name Age Gender
1 ABC 21 M
2 MNP 22 F
3 XYZ 25 M
11 LMP 31 F
12 PLL 42 M
13 UIP 37 F
请建议我如何在Hive中实现这一目标。
答案 0 :(得分:2)
select inline
(
array
(
struct(ID1,Name1,Age1,Gender1)
,struct(ID2,Name2,Age2,Gender2)
,struct(ID3,Name3,Age3,Gender3)
)
) as (ID,Name,Age,Gender)
from mytable
+----+------+-----+--------+
| id | name | age | gender |
+----+------+-----+--------+
| 1 | ABC | 21 | M |
| 2 | MNP | 22 | F |
| 3 | XYZ | 25 | M |
| 11 | LMP | 31 | F |
| 12 | PLL | 42 | M |
| 13 | UIP | 37 | F |
+----+------+-----+--------+
答案 1 :(得分:-1)
使用Hive UDTF可以解决您的问题。用户定义的表格函数(UDTF)作为输入在一行上工作,并返回多行作为输出。
例如:
我们有一个文件,其中有多条记录。每条记录都包含客户,商家1,商家2的列表。我们希望获得与客户相关的所有不同客户的列表。
.as-console-wrapper { max-height: 100%!important; top: 0; }
现在您可以编写一个名为爆炸的UDTF,它可以获得预期的输出,并且可以在以下查询中使用:
Sample Input:
Cust1, Merchant1, Merchant2
Cust2, Merchant1, Merchant2
Expected Output
Cust1, Merchant1
Cust1, Merchant2
Cust2, Merchant1
Cust2, Merchant2
你可以参考: https://cwiki.apache.org/confluence/display/Hive/DeveloperGuide+UDTF