Подтвердить что ты не робот

Есть ли эквивалент улья SQL, "не нравится"

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

выберите * из table_name, где column_name , например 'root ~%';

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

выберите * из table_name, где column_name не нравится 'root ~%';

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

4b9b3361

Ответ 1

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

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

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

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

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

Надеюсь, что это помогает в той или иной форме. \^ _ ^/

EDIT: добавление дополнительного метода из моего комментария ниже.

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

Ответ 2

Попробуйте следующее:

Where Not (Col_Name like '%whatever%')

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

Where Not (Col_Name rlike '.*whatever.*')

Ответ 4

В SQL:

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

В улье:

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

Ответ 5

Собственно, вы можете сделать это следующим образом:

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

Ответ 6

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

select * from table_name where regexp_extract(my_column, ('myword'), 0) = ''

Ответ 7

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

columnname != value