2017-02-15 26 views
0

Я пытаюсь запустить этот запрос с JOIN без ON.Как разрешить hive.mapred.mode = нестрогий?

Я бегу запрос как:

hive -v -f my_file.hql 

Я получил это сообщение:

В строгом режиме, декартово произведение не допускается. Если вы действительно хотите выполнить операцию, установите hive.mapred.mode = нестрогое

Я обновить файл HQL с:
set hive.mapred.mode=nonstrict поверх него.

Но потом я получил это сообщение:

SET hive.mapred.mode = нестрогое Запрос возвращается ненулевой код: 1, причина: Невозможно изменить 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

Как вы уже знаете, декартовой продукт не допускается в строгом режиме (и по уважительным причинам). В вашем случае использования кажется, что у вас нет прав на внесение изменений в настройки типа улья.

Чтобы взломать эту проблему, вы можете сделать следующее. Сначала нужно создать две новые таблицы

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

Затем соединить эти таблицы на этом join_key. Результатом будет декартово произведение, так как оно будет соответствовать каждому ряду 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 специально для этого запроса.