hivesql编码风格:中间表?

42fyovps  于 2021-06-03  发布在  Hadoop
关注(0)|答案(4)|浏览(404)

我应该在配置单元中创建和删除中间表吗?
我可以写这样的东西(非常简单):

drop table if exists tmp1;
create table tmp1 as
select a, b, c
from input1
where a > 1 and b < 3;

drop table if exists tmp2;
create table tmp2 as
select x, y, z
from input2
where x < 6;

drop table if exists output;
create table output as
select x, a, count(*) as count
from tmp1 join tmp2 on tmp1.c = tmp2.z
group by tmp1.b;
drop table tmp1;
drop table tmp2;

或者我可以把所有的事情都写进一句话:

drop table if exists output;
create table output as
select x, a, count(*) as count
from (select a, b, c
    from input1
    where a > 1 and b < 3) t1
join (select x, y, z
    from input2
    where x < 6) t2
on t1.c = t2.z
group by t1.b;

显然,如果我多次重用中间表,那么创建它们是非常有意义的。但是,当它们只使用一次时,我有一个选择。
我两个都试过了,第二个比墙时间快6%,但比墙时间慢4% MapReduce Total cumulative CPU time 日志输出。这种差异可能在随机误差范围内(由其他过程引起)。然而,合并查询是否可能导致显著的加速?
另一个问题是:中间表(只使用一次)在配置单元代码中是正常出现的吗,还是应该尽可能避免使用它们?

ha5z0ras

ha5z0ras1#

正如你所发现的,时间上可能没有什么大的差别。您很可能希望维护临时表,以便(a)“savepoint”/中间回滚或(b)进行故障排除。否则,记住(或自动化)中间表的清除/删除可能不值得管理人员付出努力。

wydwbb8l

wydwbb8l2#

我喜欢创建多个视图,然后只在末尾创建一个表。这允许hive优化器减少map reduce步骤的数量,并像dimamah和nigel指出的那样并行执行,但有助于保持非常复杂管道的可读性。
例如,你可以用

CREATE VIEW IF NOT EXISTS tmp1_view
AS
SELECT a, b, c FROM inputs
where a > 1 and b < 3;

create view if not exists tmp2_view as
select x, y, z_
from input2
where x < 6;

drop table if exists output;
create table output as
select x, a, count(*) as count
from tmp1_view join tmp2_view on tmp1_view.c = tmp2_view.z
group by tmp1_view.b;
n3schb8v

n3schb8v3#

有一个显著的区别。
运行一个大查询将允许优化器在优化方面有更多的自由。
在这种情况下,最重要的优化之一是中设置的并行优化 hive.exec.parallel . 当设置为真Hive将EXEXCEX独立阶段平行。
在您的例子中,在第二个查询中,想象t1,t2执行更复杂的工作,如 group by . 在第二个查询t1中,t2将同时执行,而在第一个脚本中,t2将是串行的。

xesrikrc

xesrikrc4#

我认为合并查询是一件好事。它允许配置单元查询优化器优化查询。
考虑一下这个愚蠢的问题:

SELECT COUNT(*) FROM (SELECT * FROM clicks WHERE dt = '2014-01-07') t;

当您运行它时,hive将只启动一个mapreduce作业。
使用中间表

CREATE TABLE tmp AS SELECT * FROM clicks WHERE dt = '2014-01-07';
SELECT COUNT(*) FROM tmp;

显然会运行两个mapreduce作业。
所以要回答你的问题:是的,合并查询可以加快速度。

相关问题