在HIve中加载的记录多于实际记录

时间:2016-12-04 13:22:16

标签: hadoop mapreduce hive hiveql

从Hive表插入到HIve表时,它正在加载更多实际记录的记录。任何人都可以帮助Hive的这种奇怪的行为吗?

我的查询将如下所示:

insert overwrite table_a
    select col1,col2,col3,... from table_b;

我的table_b包含6405465条记录。

从table_b插入table_a后,我发现table_a中的总记录是6406565。

任何人都可以在这里帮忙吗?

1 个答案:

答案 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