即使从 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),这就是统计信息错误的原因。
解决方法是:
在这种情况下关闭统计使用:
设置hive.compute.query.using.stats=false;
分析 table 正如您在评论中提到的:
分析table tbl_name分区(a,b,c)计算统计数据;
我在配置单元中有一个外部 table 并指向 HDFS 位置。我错误地 运行 两次将数据加载到 HDFS 的作业。
即使从 HDFS hive 中删除重复文件后,数据计数也会显示两次(即包括已删除的重复数据文件计数)。
select count(*) from tbl_name -- returns double time
但是,
select count(col_name) from tbl_name -- returns actual count.
当我在
之后从 Impala 尝试时,相同 tableINVALIDATE METADATA
我只能看到 HDFS 中可用的数据计数(不是重复的)。
即使从物理位置 (hdfs) 中删除后,hive 怎么能给出两倍的计数,它是否从统计信息中读取?
Hive 正在使用统计信息来计算 cont(*)
。您手动删除了文件(未使用 Hive),这就是统计信息错误的原因。
解决方法是:
在这种情况下关闭统计使用:
设置hive.compute.query.using.stats=false;
分析 table 正如您在评论中提到的:
分析table tbl_name分区(a,b,c)计算统计数据;