Я собираю таблицу в Hive. После агрегации часть данных смещается слева направо, а может и наоборот, пока не уверен.
Пример данных ниже.
+---------+------------+------+
| Site | Date | Sent |
+---------+------------+------+
| Twitter | 2019-01-01 | pos |
| Twitter | 2019-01-01 | pos |
| Twitter | 2019-01-01 | neg |
| Twitter | 2019-01-01 | pos |
+---------+------------+------+
Код прост. 1. разделите различные варианты тональности 2. Подсчитайте и сгруппируйте по сайту и дате
SELECT site, date
, COUNT(CASE sent WHEN 'negative'THEN 1 ELSE 0 END) AS negative_
, COUNT(CASE sent WHEN 'positive' THEN 1 ELSE 0 END) AS positive_
FROM my_table
GROUP BY date, site;
Ожидаемый результат
+---------+------------+------+-----------+-----------+
| Site | Date | Sent | negative_ | positive_ |
+---------+------------+------+-----------+-----------+
| Twitter | 2019-01-01 | pos | 0 | 3 |
| Twitter | 2019-01-01 | neg | 1 | 0 |
+---------+------------+------+-----------+-----------+
Фактический результат примерно такой. Некоторые строки смещаются по столбцу, и кажется, что пара других смещается в другом направлении. Это не проблема, с которой я когда-либо сталкивался. Я внутренне спросил о конвейере данных и указанном разделителе, если таковой имеется. Пока нет уважения, но я не знаю, может ли это быть причиной.
+---------+------------+------------+-----------+-----------+
| Site | Date | Sent | negative_ | positive_ |
+---------+------------+------------+-----------+-----------+
| Twitter | NULL | 2019-01-01 | 0 | 3 |
| Twitter | 2019-01-01 | neg | 1 | 0 |
+---------+------------+------------+-----------+-----------+
Кто-нибудь знает, почему? Что я мог с этим поделать?
ТАК хочет, чтобы я написал больше, чтобы это было представлено, я не знаю, что еще написать. Вышеизложенное кажется довольно простым.


Ваш код не будет давать указанный вами вывод, потому что COUNT() подсчитывает значения, отличные от NULL. ELSE 0 означает, что выражение CASE всегда возвращает значение, отличное от NULL, поэтому два подсчета должны давать одно и то же значение в каждой строке. Это не то, что показывают результаты.
Код, который вы намереваетесь:
SELECT site, date,
SUM(CASE sent WHEN 'negative'THEN 1 ELSE 0 END) AS negative_
SUM(CASE sent WHEN 'positive' THEN 1 ELSE 0 END) AS positive_
FROM my_table
GROUP BY date, site;
Это, вероятно, не решит проблему выравнивания, которая может быть больше связана с используемым вами инструментом, чем с результатами запроса.
Также я использую Alation