--现在需求想把战区给tmp2表拼上
select tmp2.b ,tmp1.c from tmp1 join tmp2 on tmp1.a like concat('%',tmp2.b,'%')
odps不支持无 on 的 join 会报
*ODPS-0130252 Cartesian product is not allowed without map join *的错误
可以往select里增加字段来绕过这个限制
with tmp1 as (
select '保定五洲长城大街店' as a,'华北战区' as c
union all
select '新疆五洲乌鲁木齐店' as a,'西北战区' as c
tmp2 as (
select '保定五洲' as b
union
select '廊坊五洲' as b
select tmp22.b ,tmp11.c from
(select *,1 as raoguo from tmp1) tmp11
join (select * ,1 as raoguo from tmp2) tmp22
on tmp11.raoguo =tmp22.raoguo
and tmp11.a like concat('%',tmp22.b,'%')
如何绕过ODPS不支持的笛卡尔积的限制需求情景再现with tmp1 as (select '保定五洲长城大街店' as a,'华北战区' as cunion allselect '新疆五洲乌鲁木齐店' as a,'西北战区' as c),tmp2 as (select '保定五洲' as bunionselect '廊坊五洲' as b)--现在需求想把战区给tmp2表拼上select tmp2.b ,tmp1.c from tmp1 join tmp2 on tmp1
select * from pn_tablename a
join
pn_tablename b;
odps
不
支持
无 on 的
join
会报
ODPS
-0130252
Cart
esian
product
is not
allowed
without
map
join
的错误
可以往select里增加字段来
绕过
这个
限制
select * from (se...
貌似大部分人在遇到报错的时候,都懒得用翻译软件翻译报错信息,一般直接抛出来问,甚至连报错信息都懒得复制,直接截图出来。所以这里特地总结了一下,最近一段时间有人经常在群里问到的报错信息。
ODPS
-0130252:
Cart
esian
product
is not
allowed
“不允许
笛卡尔积
”主要是为了防止用户误操作,不小心漏了关联条件,造成大量的资源...
踩过数据仓库
hive
的坑:
hive
设置严格模式
hive
提供了一个严格模式,可以防止用户执行那些可能产生意想不到的不好的效果的查询,也可以很好的防止数据倾斜。即某些查询在严格
模式下无法执行。通过设置
hive
.
map
red.mode的值为strict,可禁止以下3种类型的查询。
1)带有分区的表的查询
如果在一个分区表执行
hive
,除非where语句中包含分区字段过滤条件来显示数据范围,否则不允许执行。换句话说,
就是用户不允许扫描所有的分区。进行这个
限制
的原因是,通常分区表都拥有非常大的数据集,而且数据增
Hive
严格模式
Hive
提供了一个严格模式,可以防止用户执行那些可能产生意向不到的不好的效果的查询。说通俗一点就是这种模式可以阻止某些查询的执行。通过如下语句设置严格模式:
hive
> set
hive
.
map
red.mode=strict;设置为严格模式后,可以禁止3种类型的查询:
(1):带有分区的表的查询
如果在一个分区表执行
hive
,除非where语句中包含分区字段过滤条件来显示
2: 需要做不等值
join
操作(a.x
这种操作如果直接使用
join
的话语法不
支持
不等于操作,
hive
语法解析会直接抛出错误
如果把不等于写到where里会造成
笛卡尔积
,数据异常增大,速度会很慢。甚至会任务无法跑成功~
根据
map
join
的计算原理,
MAP
JION会把小表全部读
Map
Join
通常用于一个很小的表和一个大表进行
join
的场景,具体小表有多小,由参数
hive
.
map
join
.smalltable.filesize来决定,该参数表示小表的总大小,默认值为25000000字节,即25M。
Hive
0.7...
目前
hive
不
支持
in或not in 中包含查询子句的语法,所以只能通过left
join
实现。
假设有一个登陆表login(当天登陆记录,只有一个uid),和一个用户注册表regusers(当天注册用户,字段只有一个uid),这两个表都包含一个字段,uid。
如果要查询当天登陆的注册用户,需要用in查询,
hive
sql如下:
select login.uid fr...
当使用阿里云
ODPS
服务时,如果出现"The instance type is not supported"的错误提示,通常是由于所选择的实例类型不被
支持
所导致的。
当前阿里云
ODPS
支持
的实例类型有:16c8g, 32c16g, 64c32g, 96c48g, 128c64g等,如果你所选择的实例类型不在这些选项中,就会出现上述错误。
解决方法是选择
支持
的实例类型来创建
ODPS
实例。如果你不确定如何选择实例类型,可以参考阿里云官方文档,或者联系阿里云客服寻求帮助。