如何使配置单元查询利用metastore中存储的统计信息

enyaitl3  于 2021-06-25  发布在  Hive
关注(0)|答案(1)|浏览(235)

我正在使用配置单元版本1.2.1。如果我运行select count(*) from mytable ,我看到它启动了一个tez任务。因此,显然它不使用任何表统计信息,因为理想情况下,行数应该从hive元存储中存储的表统计信息中获取。我还显式地检查了配置单元元存储区中的所有表,但在那里找不到任何表名,这在某种程度上表明它存储了表统计信息。我能看到的下一个最好的相关表格是 TAB_COL_STATS ,但是这个表只存储列级统计信息,而且它的行数也非常少,所以这个表有10行。这就提出了两个问题。
此版本的配置单元(1.2.1)是否不支持表统计信息?
如果这个元存储表。 TAB_COL_STATS 存储所有内容,为什么像num\u rows这样的任何列都不是此表架构的一部分?我看到最大值,最小值,平均值,数值等不同类型的列。
当我在一个表中查询一些统计信息(例如行数)时,我是否必须打开一些选项,以便它能够利用内部存储的统计信息,而不是运行tez作业?

lstz6jyr

lstz6jyr1#

它支持表级统计。
配置单元元存储表高度规范化。您可以在中找到有关行数的信息 TABLE_PARAMS 或者 PARTITION_PARAMS .
你应该设置 hive.compute.query.using.statstrue 将元数据用于以下查询 select count(*)... .
但事先要确保这些统计数据确实存在。
如果没有,快跑 analyze table mytable compute statistics 先把它收集起来。
或者你可以设置 hive.stats.autogathertrue 将数据插入表时强制收集。

相关问题