我正在使用配置单元版本1.2.1。如果我运行select count(*) from mytable
,我看到它启动了一个tez任务。因此,显然它不使用任何表统计信息,因为理想情况下,行数应该从hive元存储中存储的表统计信息中获取。我还显式地检查了配置单元元存储区中的所有表,但在那里找不到任何表名,这在某种程度上表明它存储了表统计信息。我能看到的下一个最好的相关表格是 TAB_COL_STATS
,但是这个表只存储列级统计信息,而且它的行数也非常少,所以这个表有10行。这就提出了两个问题。
此版本的配置单元(1.2.1)是否不支持表统计信息?
如果这个元存储表。 TAB_COL_STATS
存储所有内容,为什么像num\u rows这样的任何列都不是此表架构的一部分?我看到最大值,最小值,平均值,数值等不同类型的列。
当我在一个表中查询一些统计信息(例如行数)时,我是否必须打开一些选项,以便它能够利用内部存储的统计信息,而不是运行tez作业?
1条答案
按热度按时间lstz6jyr1#
它支持表级统计。
配置单元元存储表高度规范化。您可以在中找到有关行数的信息
TABLE_PARAMS
或者PARTITION_PARAMS
.你应该设置
hive.compute.query.using.stats
至true
将元数据用于以下查询select count(*)...
.但事先要确保这些统计数据确实存在。
如果没有,快跑
analyze table mytable compute statistics
先把它收集起来。或者你可以设置
hive.stats.autogather
至true
将数据插入表时强制收集。