从配置单元表插入到配置单元表时,加载的记录比实际记录多。有人能帮上忙吗?我的查询如下:
insert overwrite table_a select col1,col2,col3,... from table_b;
我的表由6405465条记录组成。从表\u b插入表\u a后,我发现表\u a中的记录总数是6406565。有人能帮忙吗?
u3r8eeie1#
如果 hive.compute.query.using.stats=true; 然后优化器使用统计信息进行查询计算,而不是查询表数据。这要快得多,因为metastore是一个类似mysql的快速数据库,不需要map reduce。但是,如果不是使用insert overwrite或配置参数加载表,则统计信息可能不新鲜(过时) hive.stats.autogather 负责统计的自动收集设置为false。另外,在加载文件或使用第三方工具后,统计信息也不会是最新的。这是因为从来没有分析过文件,metastore中的统计数据也不新鲜,如果你放了新文件,没有人知道数据是如何更改的。同样在sqoop加载之后,使用“analyze table…”收集加载后的表或分区的统计信息也是一个很好的实践。。。“计算统计数据”。如果无法自动收集统计信息(用于插入覆盖)或通过运行 ANALYZE 最好关掉它 hive.compute.query.using.stats 参数。配置单元将查询数据而不是使用统计信息。参考如下:https://cwiki.apache.org/confluence/display/hive/statsdev#statsdev-统计输入
hive.compute.query.using.stats=true;
hive.stats.autogather
ANALYZE
hive.compute.query.using.stats
1条答案
按热度按时间u3r8eeie1#
如果
hive.compute.query.using.stats=true;
然后优化器使用统计信息进行查询计算,而不是查询表数据。这要快得多,因为metastore是一个类似mysql的快速数据库,不需要map reduce。但是,如果不是使用insert overwrite或配置参数加载表,则统计信息可能不新鲜(过时)hive.stats.autogather
负责统计的自动收集设置为false。另外,在加载文件或使用第三方工具后,统计信息也不会是最新的。这是因为从来没有分析过文件,metastore中的统计数据也不新鲜,如果你放了新文件,没有人知道数据是如何更改的。同样在sqoop加载之后,使用“analyze table…”收集加载后的表或分区的统计信息也是一个很好的实践。。。“计算统计数据”。如果无法自动收集统计信息(用于插入覆盖)或通过运行
ANALYZE
最好关掉它hive.compute.query.using.stats
参数。配置单元将查询数据而不是使用统计信息。参考如下:https://cwiki.apache.org/confluence/display/hive/statsdev#statsdev-统计输入