我在 hive 里有一张table,如下所示,
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
---------------------------------
我想再要一张table 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
那些空值在那里做什么?我已经把你的例子一行一行地复制粘贴好了。即使将表创建为,
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
2条答案
按热度按时间i7uq4tfw1#
我不确定这是不是问题所在,但在列值在某些行中有前导空格或尾随空格的情况下,我看到了类似的结果。Hive不会考虑
'fsx31'
以及'fsx31 '
(注意后面的空格)是相同的值,因此在分组时会给它们单独的行。当你使用
TRIM
删除前导空格和尾随空格,像这样吗?(严格来说,使用子查询来修剪和别名列并不是必需的,但我希望这有助于澄清其意图。)
希望有帮助。
bvjxkvbb2#
你一定错过了什么。我尝试使用与您的表相似的以下数据,并检查输出是否如您所期望的那样完美。
我想以上是你所期望的结果。