是否有一个Hive相当于SQL“不喜欢”

时间:2011-04-11 21:53:11

标签: syntax hive sql-like

虽然Hive支持积极的查询:ex。

  

从table_name中选择*,其中column_name 类似于'root~%';

Hive 支持类似查询的否定:例如

  

从table_name中选择*其中column_name 不像'root~%';

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

8 个答案:

答案 0 :(得分:46)

试试这个:

Where Not (Col_Name like '%whatever%')

也适用于rlike:

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

答案 1 :(得分:8)

不喜欢HIVE版本0.8.0,请查看JIRA。

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

答案 2 :(得分:4)

在SQL中:

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

在Hive中:

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

答案 3 :(得分:3)

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

我没有做任何我试图匹配某个单词的内容,但您可以查看RLIKE(在此部分中https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#Relational_Operators

这可能是一个黑客工作,但您可以执行子查询,在其中检查它是否与正值匹配并执行CASEhttp://wiki.apache.org/hadoop/Hive/LanguageManual/UDF#Conditional_Functions)以获得已知值要检查的主查询是否匹配。

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

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

希望以某种方式或其他方式提供帮助。 \ ^ _ ^ /

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

对于您提供的示例colName RLIKE'[^ r] [^ o] [^ o] [^ t]〜\ w'这可能不是最佳REGEX,而是要查看而不是子查询

答案 4 :(得分:1)

使用regexp_extract也可以:

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

答案 5 :(得分:0)

实际上,你可以这样做:

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

答案 6 :(得分:0)

在黑斑羚中,您可以使用!=而不是:

columnname != value

答案 7 :(得分:0)

作为@Sanjiv answered

hive 支持 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)