2016-09-22 12 views
0

このように使用できますか?MAPJOINヒントとSTREAMTABLEヒントを同時に設定できますか?

select /*+ MAPJOIN(t2)*//*+ STREAMTABLE(t1)*/ 
     t1.c1. 
     t2.c1 
from t1 
left outer join t2 
on t1.c1 = t2.c1; 

異なる結合キーに「STREAMTABLE」が混乱しています。

例: t3は最大のテーブル、t2はセカンダリの大きなテーブル、t1は最小のテーブルです。

select 
    /*+ STREAMTABLE(t2)*/ 
    t1.c3, 
    t2.c2, 
    t3.c3 
from t2 
left outer join 
t1 
on t2.c1=t1.c1 
left outer join 
t3 on t2.c2=t3.c2; 

もしそうならt2は、それはだt1に参加ok.ButときT2 T3に参加するとき、t2はまだのように大きなテーブルを扱う場合ならば? この状況をどのように処理できますか?

+0

このようなヒントは一切使用しないでください。コストベースのオプティマイザがこの作業を行います。費用ベースのオプティマイザ+統計を使用します。 – leftjoin

+0

@leftjoinこんにちは、どうすればいいですか?ハイブバージョンは0.13.xですか?私は何をすべきですか? – user5107182

+0

アップグレード。 0.14 Hive on Tezははるかに高速で、ヒントは必要ありません。 – leftjoin

答えて

0

次でこれを達成することができます:

select /*+ MAPJOIN(t2), STREAMTABLE(t1)*/ 
    t1.c1. 
    t2.c1 
from t1 
left outer join t2 
on t1.c1 = t2.c1; 

は、あなたがまだに実行される可能性CBOに関連する欠陥の非自明数は、特に私の経験では、ウインドウ機能や柱状の形式を含む、があります。したがってヒントを効果的に適用する方法を知ることは多少有用です。

関連する問題