sql - Hive通过 ‘distinct’子句给出一条记录,但是 ‘count’是0

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

这怎么可能?

最佳答案

我不知道您的表是否在 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)

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

相关文章:

hadoop - Hadoop 和 Nosql 的区别

java - org.apache.hadoop 包不存在

mysql - mysql - 两个表之间如何SELECT一个特定值的id存在的表

c# - 检查列是否允许空值,C#?

sql - 转换 SQL 日期时间格式

hadoop - 我可以通过在hadoop环境中处理元组或包以某种方式返回String吗?

php - Mysql 连接两个查询

mysql - 将查询中的表拆分为多个表(使用 "DISTINCT")

java - 使用Hadoop时如何自定义FileInputFormat以在Java中读取多行文件?

hadoop - 我们可以在一个群集中有名称节点,而在另一个群集中有数据节点吗?