В настоящее время у меня есть проблема, когда мне нужно найти количество групп в группе. Однако я хочу создать в режиме онлайн для охватывающей группы и объединить меньшую группу в строку.
В следующей таблице показана ситуация, с которой я сейчас столкнулся:
----------------------------------------
Timestamp ID Member
----------------------------------------
1 1 A
1 1 B
1 2 A
1 2 B
1 2 C
2 1 A
2 2 A
2 2 A
2 2 C
----------------------------------------
Теперь я хочу найти для каждой временной метки, сколько (различных) членов каждого идентификатора находится в таблице, т.е. результат должен выглядеть так:
Timestamp MemberIDCount
----------------------------------------
1 1:2,2:3
2 1:1,2:2
----------------------------------------
т.е. формат строки:
[ID]:[count(distinct(member)],...
Я знаю, что вы можете решить эту проблему с помощью двух последовательных групповых операций (т.е. сначала по метке времени и идентификатору для подсчета членов и метке времени включения для конкатенации строк). Однако я надеюсь, что есть более разумное решение, так как я должен применить его к большому набору данных и не хочу выполнять 2 групповых запроса. Я работаю с Cloudera Impala, но я также приветствую решения на других языках SQL.
Спасибо за помощь.