有一张桌子(IN HIVE)示例-meanalytics.key2_master_ids该表有6列(cmpgn_id,offr_id,exec_id,creatv_id,cmpl_dt,mkt_cd),并且可能有重复项(重复行)
现在这些是我运行的以下查询
1)hc.sql("Select count(*) from meanalytics.key2_master_ids").show()
- +--------+
|count(1)|
+--------+
| 688919|
+--------+
2)hc.sql("Select count(distinct *) from meanalytics.key2_master_ids").show()
|count(DISTINCT cmpgn_id, offr_id, exec_id, creatv_id, cmpl_dt, mkt_cd)|
+----------------------------------------------------------------------+
| 589808|
从这两个查询中,我推断出该表具有重复的行。
现在我使用不同的*选择不同的行并查看计数
3)hc.sql("Select count(*) from (Select distinct * from meanalytics.key2_master_ids)").show()
+--------+
|count(1)|
+--------+
| 688919|
+--------+
正如您所看到的,使用不同的((688919))是相同的普通count()(688919),但是当我使用count(distinct *)(589808)时,它是不同的。有人可以解释一下结果吗?请吗?
编辑1)还尝试通过提供所有6个列名来显式选择所有不同的值,即使在计数为688919而不是计数(distinct *)]时得到的589808也是如此
hc.sql("Select count(*) from (Select distinct cmpgn_id,offr_id,exec_id,creatv_id,cmpl_dt,mkt_cd from meanalytics.key2_master_ids)").show()
+--------+
|count(1)|
+--------+
| 688919|
+--------+
[有一个表(IN HIVE)示例-meanalytics.key2_master_ids此表有6列(cmpgn_id,offr_id,exec_id,creatv_id,cmpl_dt,mkt_cd),可能现在有重复项(重复行)...
原因是COUNT(*)
在MySQL中是一种特殊情况。从manual: