У моей компании есть программное обеспечение для создания SQL в Hive SQL.Часть left является гибкой и может быть любого типа (например, String), поскольку у меня есть свобода хранить или конвертировать.Часть right не является гибкой, так как это может быть только в выражении SQL: ('a','b','c')
.Таким образом, я могу добавить к ней такую функцию, как concat_ws('a','b','c')
, но не могу удалить круглую скобку (..)
вокруг нее.
Я хочу сделать 2 сценария:
('a','b')
является подмножеством ('a','b','c')
.Так что это вернет TRUE
.Однако ('a','d')
- это подмножество ('a','b','c')
, которое вернет FALSE
, так как d
не существует в правой части. ('a','b')
имеет по крайней мереодин элемент в ('a','b','c')
.Это возвращает TRUE
, так как либо a
, либо b
находится справа.Но ('d','e')
имеет по крайней мере один элемент в ('a','b','c')
будет FALSE
.
Есть ли способ сделать это без написания UDF или добавления сторонних UDF?
Я думал о том, чтобы преобразовать их в нижний регистр и сравнить как трюк, такой как 'ab'
это подстрока 'abc'
(некрасивое решение):
select instr(concat_ws('|',sort_array(array('B','A','C'))),'A|B')>0;
return TRUE
select instr(concat_ws('|',sort_array(array('B','A','C'))),'A|E')>0;
return FALSE
Но второй случай сложнее.Я предполагаю, что:
- Я могу объединить две строки
- Разбить на массив с помощью
|
- Объединить уникальные значения в массив
- Количествоконечные элементы массива, если их объединено меньше двух
Странно, но просто идея!