如何允许hive.mapred.mode = nonstrict?

Alv*_*oao 2 hadoop hive hql

我正在尝试运行这个查询,JOIN没有ON属性.

我正在运行查询,如:

hive -v -f  my_file.hql
Run Code Online (Sandbox Code Playgroud)

我收到了这条消息:

在严格模式下,不允许使用笛卡尔积.如果您确实要执行该操作,请设置hive.mapred.mode = nonstrict

我更新了hql文件:
set hive.mapred.mode=nonstrict在它上面.

但后来我收到了这条消息:

SET hive.mapred.mode = nonstrict查询返回非零代码:1,原因:无法在运行时修改hive.mapred.mode.它位于参数列表中,无法在运行时修改

我怎么能解决这个问题?

ps:我想做到这一点cartesian product.

我是如何实现的?我可以在哪里设置此变量hive.mapred.mode

spi*_*ijs 9

正如您所知,严格模式下不允许使用笛卡尔积(并且有充分理由).在您的用例中,您似乎无权更改这些类型的配置单元设置.

要解决这个问题,你可以做的是以下内容.首先创建两个新表

create table new_1 as SELECT *,1 as join_key from table1;
create table new_2 as SELECT *,1 as join_key2 from table2;
Run Code Online (Sandbox Code Playgroud)

然后加入这些表格join_key.结果将是笛卡尔积,因为它将匹配每一行的table1每一行table2.

select * from new_1 join new_2 on join_key=join_key2
Run Code Online (Sandbox Code Playgroud)

刚刚发现使用--hiveconf解决了这个问题:

hive -v -f  my_file.hql --hiveconf hive.mapred.mode=nonstrict
Run Code Online (Sandbox Code Playgroud)

将允许nonstrict mode专门为此查询.