2017-02-15 14 views
0

私はJOINONプロパティなしでこのクエリを実行しようとしています。私はこのメッセージを得たどのようにhive.mapred.mode = nonstrictを許可しますか?

hive -v -f my_file.hql 

::私はのようなクエリを実行している

strictモードでは

を、デカルト積を許可されていません。その上
set hive.mapred.mode=nonstrict:あなたが本当に操作、設定hive.mapred.mode =厳格で

を実行する をしたい場合は、私はとHQLファイルを更新します。

しかし、私はこのメッセージを得た:1、原因: は、実行時にhive.mapred.modeを変更することはできません

SET hive.mapred.mode =厳格でクエリはゼロ以外のコードを返しました。 実行時に変更できないパラメータのリストにあります

どのようにこの問題を解決できますか?

ps:これを作りたいcartesian product

どうすればいいですか?この変数をどこで設定できますかhive.mapred.mode

+0

hive-site.xmlで設定しようとしましたか? – spijs

+0

(共有クラスタを使用している)hive-site.xmlにアクセスできない@spijs –

+0

「ON」を使用しない理由はありますか?どうやらHiveはwhere句を 'ON'に変換するのを最適化できません。 – spijs

答えて

2

あなたが既に知っているように、デカルト形式の製品は、厳格なモード(および正当な理由がある)では使用できません。あなたのユースケースでは、これらのタイプのハイブ設定を変更する権限がないようです。

この問題をハックするには、次のような対策が必要です。 まずこのjoin_keyにこれらのテーブルを結合次に、2つの新しいテーブル

create table new_1 as SELECT *,1 as join_key from table1; 
create table new_2 as SELECT *,1 as join_key2 from table2; 

を作成します。結果は、table1の各行とtable2の各行が一致するため、デカルト積になります。

select * from new_1 join new_2 on join_key=join_key2 

ちょうど--hiveconfを使用して問題を解決することを見出し:

hive -v -f my_file.hql --hiveconf hive.mapred.mode=nonstrict 

は、このクエリのために特別にnonstrict modeが可能になります。

関連する問題