hadoop—如何使用impala对配置单元表中的列子集运行计算统计信息?

siv3szwd  于 2021-05-31  发布在  Hadoop
关注(0)|答案(2)|浏览(377)

我有一个很长很宽的配置单元表,返回查询结果需要花费大量的时间。因此,我尝试对表执行“computestats”,但由于表的宽度,此操作经常超时。因此,我想知道是否有一种方法可以在选定的列上运行“computestats”?cloudera网站上的文档表明这是可能的,但是语法不起作用。
这是我试过但没用的。请告知,因为这些都会导致语法错误。

COMPUTE STATS database.table field1
COMPUTE STATS database.table field1, field2
COMPUTE STATS database.table (field1, field2)
dtcbnfnu

dtcbnfnu1#

hive的工作原理是创建在不同引擎中运行的作业(最初是mapreduce,它可能相当慢),并且可以更改底层引擎。您可以使用apachespark或apachetez而不是mapreduce,两者都比mapreduce快。较新版本的hive还支持一种称为llap(live long and process)的体系结构,该体系结构可以像impala一样缓存元数据,从而减少查询延迟。您可能需要针对自己的表测试一些典型的查询,看看其中一个是否比impala更适合交互式和特殊查询。
了解执行计划
要真正了解是什么导致查询花费很长时间,您需要了解hive或impala在执行查询时将执行哪些操作。要找到答案,可以查看查询的执行计划。执行计划是对查询所需任务的描述、执行它们的顺序以及每个任务的一些细节。
要查看查询的执行计划,可以执行以下操作:
在查询前面加上关键字explain,然后运行它。
执行计划可能是漫长而复杂的。充分理解它们需要对mapreduce有深入的了解。
hive和impala提供的执行计划看起来略有不同,但在基本层面上,它们提供的信息大致相同。
Hive解释计划理解
表和列统计信息
您使用的sql引擎自己对查询进行一定量的优化—如果可能的话,它们会寻找处理查询的最佳方式。当查询使用联接时,优化器在具有表统计信息和列统计信息时可以做得更好。对于整个表,这些统计信息包括行数、用于存储数据的文件数以及数据的总大小。列统计信息包括不同值的近似数目以及值的最大和平均大小(不是最大值或平均值,而是存储中使用的大小)。优化器在决定如何执行联接任务时使用此信息。统计信息还可以帮助您的系统防止由于内存使用和资源限制而导致的问题。
这些统计信息不是自动计算出来的,您必须使用sql命令手动触发它。
一旦统计数据被计算出来,hive和impala都可以使用它们,但是如果你在hive中计算它们,你需要刷新impala的元数据缓存。如果对表进行任何更改(例如添加或删除数据),则需要重新计算统计信息。
Hive和 Impala 都可以使用这些统计数据,即使是由另一台机器计算出来的。但是,当您有impala和hive可用时,cloudera建议使用impala的computestats命令来计算和查看统计信息。Hive的方法比较难用。如果您确实使用了配置单元,那么如果希望impala使用统计信息,则必须刷新impala的表元数据缓存。
Impala 统计
impala用于计算表的统计信息(包括所有列的统计信息)的语法是compute stats dbname.tablename;如果表在活动数据库中,可以省略dbname。从命令。
要查看impala中的统计信息,请运行show table stats dbname.tablename;或显示列stats dbname.tablename;
注意:如果尚未计算统计数据,则表中的行显示-1。每列的#nulls统计信息将始终为-1;旧版本的impala会计算这个统计数据,但它不用于优化,所以新版本会跳过它。
Hive中的统计信息
hive计算表统计信息的语法是analyze table dbname.tablename compute statistics;如果表在活动数据库中,可以省略dbname。从命令。要计算列统计信息,请在命令末尾添加for列。
要查看配置单元中的表统计信息,请运行describe formatted dbname.tablename;表参数部分将包括numfiles、numrows、rawdatasize和totalsize。要查看列的统计信息,请在末尾包含列名:descripe formatted dbname.tablename columnname;一次只能显示一列的列统计信息。

lp0sw83n

lp0sw83n2#

经过进一步的研究,确认了语法实际上是正确的,但是computestats的column list参数直到cdh5.15.x才可用。我把这个留在这里,以防有人遇到同样的问题。

相关问题