聚合后的数据移位列[配置单元]

时间:2019-03-18 20:39:08

标签: sql hive

我正在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 |
+---------+------------+------------+-----------+-----------+

有人知道为什么吗?我该怎么办?


因此,我希望我为此写更多的东西,我不知道还要写些什么。上面的内容似乎很简单。

1 个答案:

答案 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;

这可能无法解决对齐问题,对齐问题可能与您所使用的工具有关,而与查询结果有关。