配置单元查询效率



你能帮我解决Hive查询效率问题吗?我有两个查询适用于同一个问题。我只是想不通为什么一个比另一个快得多。如果您知道,请随时提供见解。欢迎任何信息!

问题:我正在尝试检查 Hive 镶木地板表中一堆变量的最小值。

查询:我尝试了两个查询,如下所示:

query 1

drop 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 需要多长时间。但是在我提交第一个查询后,甚至需要很长时间才能对查询做出反应,我的意思是通常在我提交查询后,系统会开始分析并在终端中提供一些编译信息。但是,对于我提交后的第一个查询,系统甚至不会对此做出反应。所以我就杀了它。

你觉得怎么样?提前谢谢你。

查询执行时间取决于您执行它的环境。

在 MSSQL 中

有些人像你一样认为查询执行类似于他们在某些理论资源中看到的算法,但在实际情况中,这取决于其他事情。

例如,您的两个查询都有SELECT对表执行的语句,乍一看,它们需要读取所有行,但数据库服务器必须分析该语句以确定提取所请求数据的最有效方法。这称为优化SELECT语句。执行此操作的组件称为查询优化器。查询优化器的输入由查询、数据库架构(表和索引定义)和数据库统计信息组成。查询优化器的输出是查询执行计划,有时称为查询计划或只是计划。(有关查询处理体系结构的详细信息,请参阅此处)

您可以通过阅读本文在 MSSQL 中看到执行计划,我认为通过查看两个查询的执行计划,您会更好地理解。

编辑(配置单元)

Hive 提供了一个显示查询执行计划的EXPLAIN命令。此语句的语法如下:

EXPLAIN [EXTENDED|DEPENDENCY|AUTHORIZATION] query

Hive 查询将转换为一系列阶段。阶段本身的描述显示了一系列运算符以及与运算符关联的元数据。

请参阅语言手册解释以获取更多信息。

有什么令人惊讶的? 第一个查询总共必须读取src_tb200 次。 第二个读取数据一次并执行 200 次聚合。 毫无疑问,它更快。

最新更新