即使从 hdfs 删除后,Hive 如何读取数据?

How Hive reads data even after dropping from hdfs?

我在配置单元中有一个外部 table 并指向 HDFS 位置。我错误地 运行 两次将数据加载到 HDFS 的作业。

即使从 HDFS hive 中删除重复文件后,数据计数也会显示两次(即包括已删除的重复数据文件计数)。

select count(*) from tbl_name -- returns double time

但是,

select count(col_name) from tbl_name -- returns actual count.

当我在

之后从 Impala 尝试时,相同 table

INVALIDATE METADATA

我只能看到 HDFS 中可用的数据计数(不是重复的)。

即使从物理位置 (hdfs) 中删除后,hive 怎么能给出两倍的计数,它是否从统计信息中读取?

Hive 正在使用统计信息来计算 cont(*)。您手动删除了文件(未使用 Hive),这就是统计信息错误的原因。

解决方法是:

  1. 在这种情况下关闭统计使用:

    设置hive.compute.query.using.stats=false;

  2. 分析 table 正如您在评论中提到的:

    分析table tbl_name分区(a,b,c)计算统计数据;