2017-06-06 22 views
0

我有一個配置單元效率問題。我有2個需要過濾的大量查詢,加入了映射表並聯合。兩個表的所有連接都是相同的。在將聯接應用到組合表之前將它們聯合起來,或者將聯接應用到每個大規模查詢然後聯合結果,會更有效率嗎?這有什麼不同嗎?Hive union所有效率和最佳實踐

我試過第二種方式,查詢在我殺死它之前跑了24小時。我覺得我盡我所能去優化它,除了可能重新安排工會聲明。一方面,我覺得應該不重要,因爲由映射表連接的數字或行是相同的,並且由於一切都是齶式的,所以它應該花費大致相同的時間量。另一方面,也許通過先做聯合,它應該保證在運行聯接之前給兩個大的查詢賦予完整的系統資源。然後再說一次,這可能意味着一次只有2個作業正在運行,所以系統沒有被完全使用或者什麼東西。

我根本不知道蜂房和多線程是如何工作的。任何人有任何想法?

+0

提摩太,投票結束(太廣泛)。如果您需要優化助手,請添加查詢,執行計劃和表格統計信息(開始) –

回答

1

沒有這樣的最佳做法。這兩種方法都適用。 UNION ALL中的子查詢作爲並行作業運行。因此,在聯合使用作爲具有較小數據集的並行任務之前聯合,tez可以優化執行,並且常用聯接表將在每個表的單個映射階段只讀一次。 也可以避免一些子查詢的連接,例如,如果它們的鍵不適用於連接。

加入union-ed更大的數據集也可以使用非常高的並行性,具體取決於您的設置(例如每個reducer的字節數),優化程序也可以重寫查詢計劃。所以我建議你檢查兩種方法,測量速度,學習計劃,並檢查你是否可以改變一些東西。更改,測量,學習計劃...重複

更多建議: 嘗試限制數據集,然後再加入它們。如果您的連接將行數相乘,那麼對於較大的數據集,分析和聚合可能會運行得更慢,如果您可以在合併之前應用分析/聚合,則第一種方法可能更可取。

+0

不是答案... –