В запросе Hive с COUNT(*)
вместе со столбцами в предложении SELECT
эти столбцы должны быть сгруппированы в конце с GROUP BY.
Некоторые примеры:
SELECT COUNT(*) FROM employees;
SELECT id, name, COUNT(*) FROM employees GROUP BY id, name;
В вашем сценарии проблемы запрос должен выглядеть следующим образом:
select session_id, sol_id, id, session_context_code, count(*) as total
from (
select *, ROW_NUMBER() OVER (PARTITION BY session_id, sol_id,date) as rn,
substr(case_id,2,9) as id
from df.t1_data
)undup
where undup.rn =1
GROUP BY session_id, sol_id, id, session_context_code
order by session_id, sol_id, date
Вы можете прочитать подробнее ЗДЕСЬ
Обновление: Если вы хотите подсчитать все отдельные записи только по session_id и sol_id, тогда запрос может быть следующим:
select session_id, sol_id, count(*) as total
from (
select *, ROW_NUMBER() OVER (PARTITION BY session_id, sol_id,date) as rn,
substr(case_id,2,9) as id
from df.t1_data
)undup
where undup.rn =1
GROUP BY session_id, sol_id
order by session_id, sol_id, date;
Как уже говорилось, вы можете использовать только те столбцы, которые вы нужно подсчитывать в SELECT и GROUP BY.
Если вам нужно, чтобы результаты с несколькими столбцами превышали то, что нужно подсчитать, вы можете создать временную таблицу только с теми столбцами, которые подсчитаны, и объединить с исходным Таблица. то есть, если вам нужны столбцы c, d, e, f из таблицы, даже если вам нужно количество столбцов a, b, тогда вы можете сделать что-то, как показано ниже:
CREATE TABLE tmp AS
SELECT a, b, count(*)
FROM table1
GROUP BY a,b;
Do СОЕДИНЕНИЕ между tmp и table1 в столбцах a, b
SELECT y.a, y.b, x.c, x.d, x.e, x.f
FROM tmp y, table1 x
WHERE y.a=x.a
AND y.b=x.b;
Надеюсь, это поможет!