我在MySQL数据库中有两个表,称为“游戏”和“团队”。它们具有以下形式:
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)
为什么这些不同?
答案 0 :(得分:0)
事实证明,Hive查询返回正确的结果。这是因为“游戏”表中存在许多缺失的温度,MySQL将其视为0(因此包括在低于冰点的温度下计算每场比赛码数)。