Hadoop 用于确定子集的配置单元SQL
我的公司有一个软件可以在HiveSQL中构造一些SQL。左部分是灵活的,可以是任何类型(例如字符串),因为我可以自由存储或转换。右侧的部分不灵活,因为它只能在SQL语句中这样:Hadoop 用于确定子集的配置单元SQL,hadoop,hive,hiveql,Hadoop,Hive,Hiveql,我的公司有一个软件可以在HiveSQL中构造一些SQL。左部分是灵活的,可以是任何类型(例如字符串),因为我可以自由存储或转换。右侧的部分不灵活,因为它只能在SQL语句中这样:('a','b','c')。因此,我可以使用类似于concat_ws('a','b','c')的函数作为它的前缀,但我不能删除它周围的括号(…) 我想做两个场景: ('a','b')是('a','b','c')的子集。因此,这将返回TRUE。但是,('a','d')是('a','b','c')的子集,因为d在右侧不存在,所
('a','b','c')
。因此,我可以使用类似于concat_ws('a','b','c')
的函数作为它的前缀,但我不能删除它周围的括号(…)
我想做两个场景:
('a','b')
是('a','b','c')
的子集。因此,这将返回TRUE
。但是,('a','d')
是('a','b','c')
的子集,因为d
在右侧不存在,所以将返回FALSE
('a','b')
在('a','b','c')
中至少有一个元素。这将返回TRUE
,因为a
或b
在右侧。但是('d','e')
中至少有一个元素('a','b','c')
将为FALSE
'ab'
是'abc'
的子字符串(难看的解决方法):
返回TRUE
select instr(concat_ws('|',sort_array(array('B','A','C'))),'A|E')>0;
返回FALSE
但第二种情况更难。我猜:
|
奇怪,但只是一个想法 您可以查看内置的表生成函数()。例如,
explode
将为数组的每个元素创建一行explode(数组('a','b'))
。从那时起,您可以使用常见的SQL语句
完整示例实际上适用于两种情况:
with abc as (
select explode(array('a', 'b', 'c')) as l
)
select
count(*) = size(array('a', 'b')) as case1
, count(*) > 0 as case2
from
abc
where l in
('a', 'b') -- true, true
-- ('a', 'd') -- true, false
-- ('d', 'e') -- false, false
;
你在哪里有这些数据?数据类型是什么?到目前为止你尝试了什么?我的修改问题在上面。你能给出#2的完整例子吗?
with abc as (
select explode(array('a', 'b', 'c')) as l
)
select
count(*) = size(array('a', 'b')) as case1
, count(*) > 0 as case2
from
abc
where l in
('a', 'b') -- true, true
-- ('a', 'd') -- true, false
-- ('d', 'e') -- false, false
;