我正在尝试运行这个查询,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?
正如您所知,严格模式下不允许使用笛卡尔积(并且有充分理由).在您的用例中,您似乎无权更改这些类型的配置单元设置.
要解决这个问题,你可以做的是以下内容.首先创建两个新表
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专门为此查询.