У меня есть таблица в улье следующим образом,
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