Взрыв списка в Hive SQL для выявления пробелов - PullRequest
1 голос
/ 15 марта 2019

У меня есть столбец part_nos_list в виде массива <\ string> в таблице улья. Очевидно, что этот столбец пуст, и я хочу обновить его с помощью «-». Код вроде как делает это, но 42 строки в группе показали наличие пробелов. Я пытался проверить отдельные записи, но безуспешно. Здесь улей sql. Что-то не так здесь в этом sql

SELECT order_id, exploded_part_nos
FROM   sales.order_detail LATERAL VIEW explode(part_no_list) part_nos AS exploded_part_nos where sale_type in ('POS', 'OTC' , 'CCC') and exploded_part_nos = ''

Однако эта группа по sql показывает 42 как пробелы

select * from (SELECT explo,count(*) as uni_explo_cnt 
FROM sales.order_detail 
LATERAL VIEW explode(split(concat_ws("##", part_no_list),'##')) yy AS explo where sale_type in ('POS', 'OTC' , 'CCC') group by explo order by explo asc) DD

Вот как выглядит таблица улья

Id Part_no_list
1  ["OTC","POS","CCC"]
2  ["OTC","POS"]
4  NULL
5
6  ["-"]
7  ["OTC","POS","CCC"]

Заранее спасибо

1 Ответ

1 голос
/ 15 марта 2019

Чтобы проверить, является ли элемент массива в разобранном виде пустым, используйте это:

select * from(
select explode( array("OTC","POS","CCC",""))  as explo 
) s where explo=''

Результатом является одна пустая строка: http://demo.gethue.com/hue/editor?editor=289227&type=hive

Если вы хотите идентифицировать массив, содержащий пустой элемент, используйте array_contains:

select * from(
select array("OTC","POS","CCC","")  as a
) s where array_contains(a,'')

Результат:

["OTC","POS","CCC",""]

См. Тест здесь: http://demo.gethue.com/hue/editor?editor=289234

Если вы хотите найти массив, содержащий только один элемент - используйте пустую строкуsize(array)=1 and array_contains(array,''), см. Здесь: http://demo.gethue.com/hue/editor?editor=289236

Но есть также такая вещь, как пустой массив : http://demo.gethue.com/hue/editor?editor=289239&type=hive Отображается так же, как массив, содержащий пустой элемент, ноне то же самое: http://demo.gethue.com/hue/editor?editor=289240&type=hive

А чтобы найти пустой массив, используйте size()=0 Пример: http://demo.gethue.com/hue/editor?editor=289241:

select * from(
select array()  as a
) s where size(a)=0

Возвращает []

Выполнить всеэти запросы на ваши данные, и вы станете просветленным.Я думаю, что это пустые массивы, а не пустой элемент в вашем случае

Пустой массив не равен NULL, потому что это все еще объект массива нулевого размера: http://demo.gethue.com/hue/editor?editor=289242

select * from(
select array()  as a
) s where a is null

Возвращает нетСтроки

Улучшенный массив запросов только без разнесения и используйте array_contains и size для поиска пустых массивов и пустых элементов.Используйте LATERAL VIEW OUTER для генерации строк, даже если LATERAL VIEW обычно не генерирует строки.Боковой обзор без внешнего слова работает как ВНУТРЕННЕЕ СОЕДИНЕНИЕ, см. Документы о Боковой обзор внешний

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...