前言
- Hive:2.3.0
- Hadoop:2.7.7
- JDK:1.8.0_221
原因
因爲執行count(1)或count(*)統計行數時,默認會從Hive的元數據庫中查詢 rowsNum 對應值作爲結果返回,一般情況下,如果是使用加載數據文件load data的方式填充表數據,則不會收集此統計信息,Hive收集的統計信息與收集時機見官方文檔。
解決方案:
方案一:
使用ANALYZE命令手動更新表統計信息,如:
ANALYZE TABLE Table1 COMPUTE STATISTICS;
方案二:
對於類似於“count(1)”的基礎查詢不使用元數據中的統計信息,而是執行MR Job,即設置參數hive.compute.query.using.stats
值爲false