2021-11-14 hive select * 有数据,但是 select count(*) 没有数据

在Hive查询中遇到一个现象,即使用`select *`能显示数据,但`select count(*)`却返回空结果。这可能是由于Hive在通过location方式加载数据后,元数据还未更新。解决方法是调整`hive.compute.query.using.stats`参数,将其设置为`false`,使得查询时实际扫描数据而非依赖元数据统计信息,从而得到正确的数据量。

一、hive 查询时发现 select * 有数据,但是 select count(*) 没有数据

select * from ods.ods_start_log limit 11;

在这里插入图片描述

select count(*) from ods.ods_start_log;

在这里插入图片描述

二、原因

建表以location的方式加载数据,此时元数据还没有记录新的数据,当执行 count(*) 时,系统会自动到元数据中读取数据,此时元数据是没有数据的。

三、解决办法

使用参数

hive.compute.query.using.stats

当hive.compute.query.using.stats=true时,select count(*) from直接从元数据保存的统计信息中获取表中记录条数。这个是默认的方式。
当hive.compute.query.using.stats=false时,该sql查询会以集群模式运行返回结果。
因此,为了真实的反应表的数据量,应该设置hive.compute.query.using.stats=false

四、结果

set hive.compute.query.using.stats=false;select count(*) from ods.ods_start_log;

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值