hive查询提供与sql不同的结果

unhi4e5o  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(326)

我在mysql数据库中有两个表,分别叫做“game”和“team”。它们的形式如下:

game:
+-----+------+
| gid | temp |
+-----+------+
|   1 | 79   |
|   2 | 78   |
|   3 | 109  |
|   4 | 77   |
|   5 | 90   |
|   6 | 89   |
|   7 | 65   |
|   8 | 71   |
|   9 | 89   |
|  10 | 80   |
+-----+------+

team:
+-----+-------+-----+-----+
| gid | tname | ry  | py  |
+-----+-------+-----+-----+
|   1 | SF    |  92 | 247 |
|   1 | ATL   |  95 | 264 |
|   2 | JAC   | 119 | 279 |
|   2 | CLE   |  96 | 153 |
|   3 | PHI   | 306 | 119 |
|   3 | DAL   |  67 | 100 |
|   4 | NYJ   | 118 | 261 |
|   4 | GB    |  62 | 149 |
|   5 | IND   | 119 | 267 |
|   5 | KC    |  74 | 206 |
+-----+-------+-----+-----+

有更多的列,但这些是相关的。我已经使用sqoop将它们导出到hive(我正在伪分布式模式下运行),并尝试运行一个简单的查询;但是,我得到的结果与在mysql中运行同一查询的结果大不相同。
例如,在hive中,如果我运行查询(以获得在零下冰点温度下每场比赛的平均码数)

SELECT tname, AVG(ry+py) as ypg FROM team INNER JOIN 
    (SELECT gid FROM game WHERE temp<=32) AS cold
    ON team.gid=cold.gid GROUP BY tname;

我明白了

OK
ARI 263.0
ATL 271.5
BAL 309.77777777777777
BUF 304.5
CAR 278.6666666666667
CHI 292.6333333333333
CIN 309.77272727272725
CLE 290.6666666666667
DAL 255.85714285714286
DEN 366.5
DET 327.44444444444446
GB  373.75471698113205
HOU 391.75
IND 303.9
JAC 302.0
KC  346.4782608695652
MIA 325.1666666666667
MIN 325.6666666666667
NE  358.5
NO  369.3333333333333
NYG 347.57142857142856
NYJ 310.27777777777777
OAK 326.7
PHI 344.3
PIT 359.969696969697
SD  337.14285714285717
SEA 289.45454545454544
SF  340.14285714285717
STL 452.0
TB  348.3333333333333
TEN 305.3076923076923
WAS 290.3333333333333
Time taken: 30.172 seconds, Fetched: 32 row(s)

然而,在mysql中运行相同的查询

+-------+----------+
| tname | ypg      |
+-------+----------+
| ARI   | 339.7283 |
| ATL   | 347.1628 |
| BAL   | 304.5625 |
| BUF   | 305.1250 |
| CAR   | 333.7179 |
| CHI   | 313.3462 |
| CIN   | 316.9167 |
| CLE   | 301.1579 |
| DAL   | 356.4805 |
| DEN   | 357.8298 |
| DET   | 366.3509 |
| GB    | 372.9351 |
| HOU   | 334.9915 |
| IND   | 362.3732 |
| JAC   | 325.9444 |
| KC    | 339.1622 |
| MIA   | 318.6667 |
| MIN   | 341.0000 |
| NE    | 368.5614 |
| NO    | 408.4219 |
| NYG   | 370.2500 |
| NYJ   | 314.8788 |
| OAK   | 327.7143 |
| PHI   | 354.2619 |
| PIT   | 359.4565 |
| SD    | 352.2105 |
| SEA   | 349.8444 |
| SF    | 320.9744 |
| STL   | 348.1736 |
| TB    | 309.9310 |
| TEN   | 314.4222 |
| WAS   | 362.3548 |
+-------+----------+
32 rows in set (0.00 sec)

为什么这些不同?

idv4meu8

idv4meu81#

结果是,配置单元查询返回了正确的结果。这是因为在“游戏”表中有许多缺少的温度,mysql将其视为0(因此包括在亚冰点温度下每场游戏的码数计算中)。

相关问题