Hive通过'distinct'子句给出记录,但'count'为0

时间:2016-07-27 10:16:15

标签: sql hadoop

看看这些。

0: jdbc:hive2> select distinct A_COL from A_TABLE where A_COL='1999-05-04';
+-------------+--+
|    A_COL    |
+-------------+--+
| 1999-05-04  |
+-------------+--+
1 row selected (6.127 seconds)

0: jdbc:hive2> select count(*) from A_TABLE where A_COL='1999-05-04';
+------+--+
| _c0  |
+------+--+
| 0    |
+------+--+
1 row selected (4.206 seconds)

0: jdbc:hive2> select * from A_TABLE where A_COL='1999-05-04';
+-------+---------------
| A_COL | blabla...
+-------+----------
+-------+----------
No rows selected (0.292 seconds)

我认为第一个查询意味着'至少有一个A_COL值为'1999-05-04'的记录存在。'
但第二和第三个问题否认了这一点。

怎么可能?

1 个答案:

答案 0 :(得分:1)

我不知道您的表是否在列A_COL上有分区,但情况可能如此。所以distinct显示它的分区值,但表没有实际数据:

hive> CREATE TABLE test_2(B_COL string) PARTITIONED BY (A_COL string);
OK
Time taken: 1.182 seconds

hive> ALTER TABLE test_2 ADD PARTITION (A_COL='2016-07-27');
OK
Time taken: 0.285 seconds

hive> select count(*) from test_2 where A_COL='2016-07-27';
OK
0
Time taken: 35.016 seconds, Fetched: 1 row(s)

hive> select * from test_2 where A_COL='2016-07-27';
OK
Time taken: 0.165 seconds

hive> select distinct(A_COL) from test_2;
2016-07-27
Time taken: 24.528 seconds, Fetched: 1 row(s)