我正在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 |
+---------+------------+------------+-----------+-----------+
有人知道为什么吗?我该怎么办?
因此,我希望我为此写更多的东西,我不知道还要写些什么。上面的内容似乎很简单。
答案 0 :(得分: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;
这可能无法解决对齐问题,对齐问题可能与您所使用的工具有关,而与查询结果有关。