我在蜂巢中有一张桌子,如下所示,
table1
Cola | Colb | Colc | Cold |
---------------------------------
...etc
efo18 691 123 5692
efo18 691 345 5657
...etc
fsx31 950 291 23456
fsx31 950 404 23456
fsx31 950 343 23456
fsx31 950 182 23456
fsx31 950 120 45042
fsx31 950 161 23456
....etc
klz57 490 121 3330
klz57 490 113 3330
klz57 490 308 3330
klz57 490 411 3330
klz57 490 161 3330
klz57 386 108 3330
klz57 490 113 3330
klz57 490 125 3330
klz57 490 165 3330
klz57 490 166 3330
...etc
---------------------------------
我想要另一个数据表,其中那些在一个组中table1
具有相同值的数据,在该数据表中,那些具有相同值的数据具有一个子组,在该子组内,那些具有相同值的数据属于一个组。换句话说,每一个唯一的组合就是一行。而重复的行被求和。Cold
Colb
Cola
Cola,Colb,Cold
insert into table table2(Col1 string,Col2 string,Col3 string,Count int) select cola,colb,cold,count(*) from table1 group by cold,colb,cola;
我预料到了这一点,
Col1 | Col2 | Col3 | Count |
-------------------------------------
efo18 691 5692 1
efo18 691 5657 1
fsx31 950 23456 5 <-----1
fsx31 950 45042 1 <-----1
klz57 490 1234 9 <-----2
klz57 386 1234 1 <-----2
--------------------------------------
我懂了,
table2
Col1 | Col2 | Col3 | Count |
-------------------------------------
efo18 691 5692 1
efo18 691 5657 1
fsx31 950 23456 4 <-----1
fsx31 950 25456 1 <-----1
fsx31 950 45042 1 <-----1
klz57 490 1234 8 <-----2
klz57 386 1234 1 <-----2
klz57 490 1234 1 <-----2
--------------------------------------
我不明白的是我正在做一个分组,Cold
然后Colb
是Cola
,那么为什么Count
标记的行(<----1),对于来自的值Cola
,在不同的行中,即使一切都在同一组?
Colc
这两行是不同的,但我没有在分组 sp 中使用它,这两行有什么不同?同样对于标记为 (<----2) 的行,这里有什么问题。
更新:
Binary01,我正在尝试您提供的示例
hive> select * from xyz;
OK
x y z zz
xxx 111 222 123 NULL NULL NULL
xxx 111 222 123 NULL NULL NULL
xxx 101 222 123 NULL NULL NULL
xux 111 422 123 NULL NULL NULL
xxx 111 522 323 NULL NULL NULL
xyx 111 622 123 NULL NULL NULL
xxx 115 322 123 NULL NULL NULL
xxx 111 122 123 NULL NULL NULL
xxx 111 223 123 NULL NULL NULL
xxy 111 212 143 NULL NULL NULL
xxx 117 222 123 NULL NULL NULL
那些 NULL 值在那里做什么?我已经逐行复制粘贴了您的示例。即使将表创建为 ,
create table xyz(x string ,y string, z string , zz string)
row format delimited fields terminated by ',';
最后的查询给出,
hive> select * from xyztemp;
OK
xux 111 422 123 NULL NULL 1
xxx 101 222 123 NULL NULL 1
xxx 111 122 123 NULL NULL 1
xxx 111 222 123 NULL NULL 2
xxx 111 223 123 NULL NULL 1
xxx 111 522 323 NULL NULL 1
xxx 115 322 123 NULL NULL 1
xxx 117 222 123 NULL NULL 1
xxy 111 212 143 NULL NULL 1
xyx 111 622 123 NULL NULL 1