Есть ли в Hive эквивалент SQL "не нравится" - PullRequest
22 голосов
/ 12 апреля 2011

В то время как Hive поддерживает положительные подобные запросы: напр.

select * from table_name, где column_name как 'root ~%' ;

Hive Не поддерживает отрицательные запросы: например,

select * from table_name, где column_name не похоже на 'root ~%' ;

Кто-нибудь знает эквивалентное решение, которое поддерживает Hive?

Ответы [ 7 ]

46 голосов
/ 15 апреля 2011

Попробуйте это:

Where Not (Col_Name like '%whatever%')

также работает с rlike:

Where Not (Col_Name rlike '.*whatever.*')
8 голосов
/ 29 октября 2014

NOT LIKE поддерживаются в HIVE версии 0.8.0, проверьте в JIRA.

https://issues.apache.org/jira/browse/HIVE-1740

4 голосов
/ 19 июня 2014

В SQL:

select * from table_name where column_name not like '%something%';

В Улей:

select * from table_name where not (column_name like '%something%');
3 голосов
/ 12 апреля 2011

Проверьте https://cwiki.apache.org/confluence/display/Hive/LanguageManual, если вы этого не сделали.Я ссылаюсь на это все время, когда пишу запросы для улья.

Я ничего не делал, когда пытался сопоставить часть слова, но вы можете проверить RLIKE (в этомsection https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#Relational_Operators)

Это, вероятно, немного хакерская работа, но вы можете выполнить подзапрос, где вы проверите, соответствует ли он положительному значению, и выполните CASE (http://wiki.apache.org/hadoop/Hive/LanguageManual/UDF#Conditional_Functions), чтобыУ меня есть известное значение для основного запроса, чтобы проверить, совпадает ли он или нет.

Другой вариант - написать UDF, который выполняет проверку.

Я просто мозговой штурм, сидядома без доступа к Hive, поэтому я могу упустить что-то очевидное.:)

Надеюсь, что это так или иначе поможет. \ ^ _ ^ /

РЕДАКТИРОВАТЬ: Добавление в дополнительный методиз моего комментария ниже.

Для вашего предоставленного примера colName RLIKE '[^ r] [^ o] [^ o] [^ t] ~ \ w' Это может быть не оптимальный REGEX, но что-то, чтобы посмотретьвместо подзапросов

1 голос
/ 08 июля 2015

Использование regexp_extract также работает:

select * from table_name where regexp_extract(my_column, ('myword'), 0) = ''
0 голосов
/ 16 февраля 2017

В импале вы можете использовать != для не как:

columnname != value
0 голосов
/ 24 апреля 2013

На самом деле, вы можете сделать это так:

select * from table_name where not column_name like 'root~%';
...