2011-04-11 26 views
20

雖然Hive支持類似查詢的積極:ex。是否存在Hive等價的SQL「不喜歡」

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

蜂房支持負像查詢:恩。

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

有誰知道Hive支持的同等解決方案嗎?

回答

4

如果你還沒有退房https://cwiki.apache.org/confluence/display/Hive/LanguageManual。我一直在爲編寫配置單元的查詢時參考它。

我沒有做任何事情,我正在試圖匹配一個單詞的一部分,但你可以看看RLIKE(在本節https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#Relational_Operators

這可能是一個黑客位的工作,但你可以執行一個子查詢,檢查它是否與正值匹配,並執行CASEhttp://wiki.apache.org/hadoop/Hive/LanguageManual/UDF#Conditional_Functions)以使主查詢具有已知值以檢查其是否匹配。

另一種選擇是編寫一個UDF來做檢查。

我只是頭腦風暴,而沒有進入蜂巢,所以我可能會失去一些明顯的東西。 :)

希望能以某種方式或其他方式幫助。 \^_ ^/

編輯:從我的評論下面添加額外的方法。

對於您提供的示例colName RLIKE'[^ r] [^ o] [^ o] [^ t]〜\ w'這可能不是最優的REGEX,而是要查找的東西而不是子查詢

+0

它看起來像CASE會做什麼,我需要它,但我的語法有問題。它是否在Select子句或Where子句中出現?此嘗試失敗:'create table tmp_table as CASE WHEN a.username like'twitter〜%'THEN''ELSE select sum(file_size)as storage,sum(bandwidth)as bandwidth from tmp_sites_compare1 a;'但它對我來說沒有任何意義,因爲它在where子句中......思考? – CMaury 2011-04-12 18:11:48

+0

@CMaury:'CASE'在'SELECT'子句中。 'SELECT CASE WHEN ... THEN ... END colName FROM ...' – Nija 2011-04-12 19:00:07

+1

@CMaury:我開始在'RLIKE'上玩弄我的作品,雖然它不會對所有情況都是最佳的使用正則表達式'not'''''。對於你提供的例子'colName RLIKE'[^ r] [^ o] [^ o] [^ t]〜\\ w''這可能不是最優的REGEX,而是要查看的東西而不是子查詢 – Nija 2011-04-13 04:03:09

40

試試這個:

Where Not (Col_Name like '%whatever%') 

還與RLIKE:

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

其實,你可以把它像這樣:

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

在SQL:

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

在蜂巢:

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

使用REGEXP_EXTRACT作品,以及:

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

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

columnname != value