从Hive表插入到HIve表时,它正在加载更多实际记录的记录。任何人都可以帮助Hive的这种奇怪的行为吗?
我的查询将如下所示:
insert overwrite table_a
select col1,col2,col3,... from table_b;
我的table_b包含6405465条记录。
从table_b插入table_a后,我发现table_a中的总记录是6406565。
任何人都可以在这里帮忙吗?
答案 0 :(得分:2)
如果ggplot(data = diamonds, mapping = aes(x = clarity)) + geom_bar(aes(fill = cut)) +
labs(x="", y="")
,则优化程序使用统计信息进行查询计算,而不是查询表数据。这要快得多,因为Metastore是像MySQL这样的快速数据库,不需要map-reduce。但是,如果表未加载INSERT OVERWRITE或负责统计自动收集的配置参数hive.compute.query.using.stats=true;
设置为false,则统计信息可能不新鲜(陈旧)。加载文件后或使用第三方工具后,统计信息也不会很新鲜。这是因为从未分析过文件,Metastore中的统计数据并不新鲜,如果你放了新文件,没人知道数据是如何被改变的。在加载sqoop等之后,使用' ANALYZE TABLE ... COMPUTE STATISTICS'来加载表或分区的统计数据是一个很好的做法。
如果无法自动收集统计信息(适用于INSERT OVERWRITE)或运行hive.stats.autogather
语句,则最好关闭ANALYZE
参数。 Hive将查询数据而不是使用统计信息。
请参阅此参考:https://cwiki.apache.org/confluence/display/Hive/StatsDev#StatsDev-StatisticsinHive