Hadoop配置单元|将配置单元中的单行列转换为多行
我有一张像这样的蜂巢桌Hadoop配置单元|将配置单元中的单行列转换为多行,hadoop,hive,hiveql,Hadoop,Hive,Hiveql,我有一张像这样的蜂巢桌 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 UI
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那样重复
我需要将上面的表转换成一个新的配置单元表,它只有4列ID、Name、Age和Gender,如下所示。我不需要在结果表中创建日期列
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中实现这一点
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
您的问题可以使用Hive UDTF解决。用户定义的表格函数(UDTF)将一行作为输入,并返回多行作为输出 例如: 我们有一个文件,其中有多条记录。每个记录都包含客户、商品1、商品2的列表。我们希望获得与客户相关的所有不同客户的列表
Sample Input:
Cust1, Merchant1, Merchant2
Cust2, Merchant1, Merchant2
Expected Output
Cust1, Merchant1
Cust1, Merchant2
Cust2, Merchant1
Cust2, Merchant2
现在,您可以编写一个名为Explode的UDTF,该UDTF将获得预期的输出,并可用于以下查询:
Select Explode(customer, firstMerchant, secondMerchant)
AS (cust, merchant)
from Merchants
你可以参考:
您的问题可以使用Hive UDTF解决。用户定义的表格函数(UDTF)将一行作为输入,并返回多行作为输出 例如: 我们有一个文件,其中有多条记录。每个记录都包含客户、商品1、商品2的列表。我们希望获得与客户相关的所有不同客户的列表
Sample Input:
Cust1, Merchant1, Merchant2
Cust2, Merchant1, Merchant2
Expected Output
Cust1, Merchant1
Cust1, Merchant2
Cust2, Merchant1
Cust2, Merchant2
现在,您可以编写一个名为Explode的UDTF,该UDTF将获得预期的输出,并可用于以下查询:
Select Explode(customer, firstMerchant, secondMerchant)
AS (cust, merchant)
from Merchants
你可以参考:
您可以使用unionall,但为此,您应该知道有多少列没有。列数不是固定的。Ankit,特定配置单元表中的列数始终是固定的。在您的示例中,我看到
Name2
位于ID2
之前。这是故意的吗?ID
可以被信任为唯一的吗?您可以使用unionall,但为此,您应该知道您有多少列没有。列数不是固定的。Ankit,特定配置单元表中的列数始终是固定的。在您的示例中,我看到Name2
位于ID2
之前。这是故意的吗?可以相信ID
是唯一的吗?如果你不知道模式,这是一个怎样的表?如果你的模式是固定的,即如果你知道一条记录最多有多少列,你仍然可以拆分记录如果你不知道模式,这是一个表吗?如果你的模式是固定的,即,如果知道一条记录的最大列数,仍然可以拆分这些记录