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

lrl1mhuk  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(699)

我试着用一个 JOIN 没有 ON 财产。
我运行的查询方式如下:

hive -v -f  my_file.hql

我收到这个信息:
在严格模式下,不允许笛卡尔积。如果确实要执行该操作,请设置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 作品?

nzk0hqpo

nzk0hqpo1#

正如您已经知道的,严格模式下不允许使用笛卡尔积(并且有充分的理由)。在您的用例中,您似乎没有权限对这些类型的配置单元设置进行更改。
为了解决这个问题,你可以做以下几点。首先创建两个新表

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 专门用于此查询。

相关问题