0

我有一个如下形式的配置单元表,其中包含超过 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
....

很快。有人可以帮我查询吗?

4

1 回答 1

0

那里。

我不确定您将如何获取目标表的#Columns(尽管您的示例中有 5 个)。我认为您可以将结果架构定义为:

column_1 string, column_2 list

您可以按照“编程 Hive ”的第 13 章示例并实现 UDAF(源代码在此处)。将代码编译并打包到一个 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
于 2013-08-11T09:12:39.450 回答