看看这些。

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'的记录。”
但是第二和第三个查询否认了这一点。

怎么可能呢?

最佳答案

我不知道您的表是否在A_COL列上进行了分区,但是可能是这种情况。所以区别显示它的分区值,但是表没有实际数据:

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)

关于sql - Hive通过 ‘distinct’子句提供一条记录,但 ‘count’为0,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38610110/

10-11 23:26