2013-07-11 44 views
2

我的配置單元查詢掛起,我不知道爲什麼(使用hadoop 0.20.1,配置單元0.9)。緩慢配置單元查詢,爲什麼(左半連接)?

查詢:

SELECT 
    a.field1 FROM table_1 a 
LEFT SEMI JOIN 
    (SELECT DISTINCT(usrId) FROM table_2 b 
     WHERE soemthing=true ORDER BY rand() limit 1000) random_user_ids 
WHERE a.usrId=random_user_ids.usrId 

EXPLAIN給我回:

STAGE DEPENDENCIES: 
    Stage-1 is a root stage 
    Stage-2 depends on stages: Stage-1 
    Stage-3 depends on stages: Stage-2 
    Stage-0 is a root stage 

數據集內表

  • 〜200M項
  • table_1.usrId的關係TABLE_1應該是大約1:40,即1000 * 40 = 40000應該以上述查詢返回ÿ

觀察:

  • 工作在最終階段-3掛起,在33%(減小>排序),其中在接合時發生(加入的結果是約40000)
  • 除了是慢爲什麼減少>排序的一部分階段-3?它應該只加入東西,而不是訂購任何東西
  • 減速機尺寸只有1(因爲排序?),它幾乎總是很糟糕,因爲它不能縮放。

如果您需要更多輸入(例如更詳細的EXPLAIN信息,更多集羣信息),請告訴。

謝謝!

回答

2

JOIN條件應該包含在ON子句中,而不是在WHERE子句中。語法的

實施例:

SELECT a.key, a.val 
FROM a LEFT SEMI JOIN b ON (a.key = b.key) 
+0

AARGH,即取得的招接通。仍然與'在哪裏'一個神祕的爲什麼減少操作員排序在Stage-3,沒有看到它與解釋計劃。 –