簡體   English   中英

優化配置單元查詢以避免JOIN

[英]Optimize hive query to avoid JOIN

問題類似於此,除了我想知道是否可以在一個查詢中進行。 這是我的工作,但眾所周知,加入是昂貴的。 有沒有更好的辦法做到這一點?

select a.tbl1,b.tbl2
from
(
  select count(*) as tbl1 from tbl1
) a
join
(
  select count(*) as tbl2 from tbl2
) b ON 1=1

如果將它們保留為單獨的列對您來說並不重要,則可以使用UNION ALL操作來處理行格式:

select 'tbl1', count(*) from tbl1
UNION ALL
select 'tbl2', count(*) from tbl2;

這將使您避免在以前的查詢中使用額外的MAPJOIN運算符。 從技術上講,您可以在最終執行計划中減少一個映射器。

更新資料

在最新的Hadoop發行版中,從性能角度來看,采用UNION或MAP JOIN方法不會有太大區別,因為這些操作將在以前的工作中進行優化。 但是請記住,在較舊版本的群集上或基於某些配置屬性,MAPJOIN可以轉換為單獨的作業。

是的,聯接很昂貴

據說聯接是昂貴的,這通常是指您在多個表中有許多記錄需要彼此匹配的情況。

根據該描述,您的加入並不昂貴,因為您僅加入2組,每組1條記錄。

但是,您必須查看開銷

也許您注意到,單個計數所花費的時間大大少於您用來計數和合並結果的命令。 這是因為映射和歸約操作會產生大量開銷(每個階段可能需要30秒)。

您可以稍作調整,看看是否達到了不會產生太多開銷的計划,但是很可能是您不走運,因為蜂巢無法很好地縮減規模。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM