2017-11-08 2 views
0

私はHDP 2.6.2とハイブを使用しています。ハイブサブクエリクエリの最適化

私は大きなテーブルからパーティションテーブルを更新していますが、クエリはうまく機能せず、その理由を理解できません。以下のINSERTステートメントは、ここで私は、句が一度実行され、その結果がキャッシュされているか、基本的に一列で全体temp_tabテーブルはすべてのノードに同梱されている場合にサブクエリを想定例

insert into partitioned_table partition(dt_month) select * from large_table where incremental_string_col > (select last_incremental_col from temp_tab)

ありますCBOによると、文字列の値をリテラルとして入れるだけでなく、うまくいくようです。

テーブルをハイブにキャッシュする必要があることを明示的に指定できますか? 問合せを1回実行して結果をキャッシュする必要があることを明示的に指定できますか? 私はここで何が欠けていますか?

私は文字列がどこにあるのかを理解していますが、最良のケースではありませんが、私はそれを助けません。

ご協力いただければ幸いです。

+0

私はハイブジョインの不等式が私が覚えているものからサポートされていないためにmapjoinを使用できません。 –

答えて

0

あなたはその後、不等式条件によって行をフィルタリングは、単一の行サブクエリと結合相互マップを使用することができます。

select * 
    from large_table l 
     cross join (single_row_subquery) s 
where l.incremental_string_col>s.last_incremental_col; 

または分離されたスクリプトにサブクエリを計算し、ここで等hivevar変数を渡す:https://stackoverflow.com/a/37821218/2700344

+0

単一行サブクエリを使用したマップ結合も、悲しいことにうまく機能しません。 私は悲しいことに、他のオプションのために行く必要があると思う..しかし、これを行うより優雅な方法がありますか?多分同じハイブセッションの中で? –

+0

mapjoinが動作する場合、joinなしの場合とほぼ同じ性能を発揮します。 – leftjoin

+0

mapjoinが動作していることを確認するにはどうすればよいですか?最適化が適用されているかどうかを確認する方法はありますか?私は明示的にこれをヒントとしてselectに述べようとしましたが、パフォーマンスは非常に劣っていました。 –