在一个蜂巢表中,我有一个线圈

时间:2013-08-08 18:12:32

标签: hive split

我有一个以下形式的hive表,其中包含超过100000行,第一列包含组,每组的行数不同。

Column 1 Column 2
 A          a1
 A          a2
 B          b1
 B          b2
 B          b3
 B          b4
 C          c1
 C          c2
 C          c3
....   

我希望将数据拆分为多个列,如下所示。

Column 1 Column 2 Column 3 Column4  Column 5
 A          a1      a2
 B          b1      b2       b3      b4
 C          c1      c2       c3
....
等等。 有人可以帮我查询吗?

1 个答案:

答案 0 :(得分:0)

那里。

我不确定你将如何获得目标表的#Columns(尽管在你的例子中有5个)。我想你可以转而将结果模式定义为:

column_1 string, column_2 list

您可以按照“Programming Hive”的第13章示例实现UDAF(源代码为here)。编译并将代码打包到jar(比如collect.jar)。

  • add jar file:///home/.../target/collect.jar;
  • CREATE TEMPORARY FUNCTION collect as "com.jointhegrid.udf.collect.GenericUDAFCollect";
  • 在您的示例create table collecttest(str1 string, str2 string)
  • 中创建表格
  • load data local ...
  • SELECT str1, collect(str2) FROM collecttest GROUP BY str1;

结果:

A       ["a1","a2"]

B       ["b1","b2","b3","b4"]

C       ["c1","c2","c3"]

此外,您还可以根据需要选择“列”值。例如:

SELECT str1, collect(str2)[1] FROM collecttest GROUP BY str1;给出结果:

A       a2
B       b2
C       c2

SELECT str1, collect(str2)[2] FROM collecttest GROUP BY str1;给出结果:

A       NULL
B       b3
C       c3