26

虽然 Hive 支持积极的类似查询:例如。

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

Hive支持否定查询:例如。

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

有谁知道 Hive 支持的等效解决方案?

4

8 回答 8

54

试试这个:

Where Not (Col_Name like '%whatever%')

也适用于 rlike:

Where Not (Col_Name rlike '.*whatever.*')
于 2011-04-14T20:56:48.827 回答
8

HIVE 0.8.0 版已支持 NOT LIKE,请查看 JIRA。

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

于 2014-10-29T13:52:40.503 回答
6

在 SQL 中:

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

在蜂巢中:

select * from table_name where not (column_name like '%something%');
于 2014-06-19T08:41:00.583 回答
3

如果您还没有,请查看https://cwiki.apache.org/confluence/display/Hive/LanguageManual 。当我为 hive 编写查询时,我一直引用它。

我没有做任何尝试匹配单词的一部分的事情,但是您可以查看RLIKE(在本节中https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#Relational_Operators

这可能是一项 hack 工作,但您可以执行子查询,检查它是否与正值匹配并执行CASE( http://wiki.apache.org/hadoop/Hive/LanguageManual/UDF#Conditional_Functions )为主查询提供一个已知值,以检查它是否匹配。

另一种选择是编写一个进行检查的 UDF。

我只是在无法访问 Hive 的情况下坐在家里进行头脑风暴,所以我可能会遗漏一些明显的东西。:)

希望以某种方式有所帮助。\^_^/

编辑:从我下面的评论中添加其他方法。

对于您提供的示例 colName RLIKE '[^r][^o][^o][^t]~\w' 这可能不是最佳的正则表达式,但需要研究而不是子查询

于 2011-04-12T00:31:34.130 回答
1

使用 regexp_extract 也可以:

select * from table_name where regexp_extract(my_column, ('myword'), 0) = ''
于 2015-07-08T15:00:27.057 回答
0

实际上,你可以这样写:

select * from table_name where not column_name like 'root~%';
于 2013-04-24T11:43:16.073 回答
0

在黑斑羚中,您可以使用!=不喜欢:

columnname != value
于 2017-02-16T19:49:42.773 回答
0

正如@Sanjiv回答的那样

蜂巢有支持not like

0: hive> select * from dwtmp.load_test;
+--------------------+----------------------+
| load_test.item_id  | load_test.item_name  |
+--------------------+----------------------+
| 18282782           | NW                   |
| 1929SEGH2          | BSTN                 |
| 172u8562           | PLA                  |
| 121232             | JHK                  |
| 3443453            | AG                   |
| 198WS238           | AGS                  |
+--------------------+----------------------+
6 rows selected (0.224 seconds)

0: hive> select * from dwtmp.load_test where item_name like '%ST%';
+--------------------+----------------------+
| load_test.item_id  | load_test.item_name  |
+--------------------+----------------------+
| 1929SEGH2          | BSTN                 |
+--------------------+----------------------+
1 row selected (0.271 seconds)

0: hive> select * from dwtmp.load_test where item_name not like '%ST%';
+--------------------+----------------------+
| load_test.item_id  | load_test.item_name  |
+--------------------+----------------------+
| 18282782           | NW                   |
| 172u8562           | PLA                  |
| 121232             | JHK                  |
| 3443453            | AG                   |
| 198WS238           | AGS                  |
+--------------------+----------------------+
5 rows selected (0.247 seconds)

于 2021-07-27T05:57:15.813 回答