Hadoop 用于确定子集的配置单元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在右侧不存在,所

我的公司有一个软件可以在HiveSQL中构造一些SQL。部分是灵活的,可以是任何类型(例如字符串),因为我可以自由存储或转换。右侧的部分不灵活,因为它只能在SQL语句中这样:
('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
     ;