hive查询效率

sshcrbum  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(410)

你能帮我解决一个Hive查询效率问题吗?我有两个查询处理同一个问题。我就是不明白为什么一个比另一个快得多。如果你知道,请随时提供见解。欢迎提供任何信息!
问题:我试图检查HiveParquet表中一堆变量的最小值。
查询:我尝试了两个查询,如下所示: query 1drop table if exists tb_1 purge; create table if not exists tb_1 as select 'v1' as name, min(v1) as min_value from src_tb union all select 'v2' as name, min(v2) as min_value from src_tb union all select 'v3' as name, min(v3) as min_value from src_tb union all ... select 'v200' as name, min(v200) as min_value from src_tb ;query 2 ```
drop table if exists tb_2 purge;
create table if not exists tb_2 as
select min(v1) as min_v1
, min(v2) as min_v2
, min(v3) as min_v3
...
, min(v200) as min_v200
from src_tb
;

结果:查询2比查询1快得多。完成第二个查询大概需要5分钟。我不知道查询1需要多长时间。但是在我提交第一个查询之后,要花很长时间才能对查询做出React,我的意思是通常在我提交一个查询之后,系统会在终端上开始分析并提供一些编译信息。但是,对于我提交的第一个查询,系统甚至不会对此做出React。所以我就杀了它。
你怎么认为?先谢谢你。
xoefb8l8

xoefb8l81#

什么是令人惊讶的?第一个查询必须为 src_tb 一共200次。第二种方法读取一次数据并执行200次聚合。这是一个没有头脑的,它是更快的。

w8f9ii69

w8f9ii692#

查询执行时间取决于执行它的环境。
在mssql中。
像您这样的一些人认为查询执行类似于他们在一些理论资源中看到的算法,但在实际情况中,它取决于其他事情。
例如,两个查询都有 SELECT 对表执行的语句,乍一看,它们需要读取所有行,但数据库服务器必须分析该语句以确定提取请求数据的最有效方法。这被称为优化 SELECT 声明。执行此操作的组件称为查询优化器。查询优化器的输入包括查询、数据库模式(表和索引定义)和数据库统计信息。查询优化器的输出是一个查询执行计划,有时称为查询计划或只是一个计划(有关查询处理体系结构的更多信息,请参见此页)
通过阅读本文,您可以看到mssql中的执行计划,我认为您可以通过查看两个查询的执行计划来更好地理解。
编辑(配置单元)
Hive提供 EXPLAIN 显示查询执行计划的命令。此语句的语法如下:

EXPLAIN [EXTENDED|DEPENDENCY|AUTHORIZATION] query

配置单元查询将转换为一系列阶段。stage本身的描述显示了一系列操作符以及与操作符关联的元数据。
有关更多信息,请参阅语言手册解释。

相关问题