我有一个以下形式的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
....
等等。
有人可以帮我查询吗?
答案 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