2016-11-10 107 views
0

我想用下面的查詢蜂巢查詢語言RLIKE查詢

select * from mytable where mycolumn rlike '\d~[\d\.]+~\d~[\d\.]+~\d~2~(33|44)` 

這裏查詢在MYTABLE

id | mycolumn 
---|-------------------------------- 
1 | 1~2.3.1~9~333.2~3~2~33 
2 | 1~1.4.3~4~233.2~4~2~44 
3 | 1~53.0.2785.124~4~6.0.1~5~2~33 
4 | 1~3~3~3~3~6~3 

但是一些樣本數據,結果總是空的。

Hive Query Language Manual所述,

NULL,如果A或B是NULL,TRUE,如果A的任何(可能爲空)子串在Java正則表達式匹配乙,否則爲FALSE。例如,'foobar'RLIKE'foo'評估爲TRUE,'foobar'RLIKE'^ f。* r $'也是如此。

我在Java中測試了RegExp,它工作正常。還試圖用\\代替\,並試圖用\~代替~,但沒有運氣。我用來測試

的Java代碼如下

 Pattern p = Pattern.compile("\\d~[\\d\\.]+~\\d~[\\d\\.]+~\\d~2~(33|44)"); 

誰能告訴什麼錯查詢?謝謝!

+0

事實證明,蜂巢不支持' \ D'。也懷疑它是否支持其他預定義的字符 – Jenson

回答

1

我認爲你可以tery這樣

where mycolumn rlike '.*~[0-9].[0-9].[0-9]~[0-9]~[0-9][0-9][0-9].[0-9]~[0-9]~  [0-9]~(33|44)'; 
or mycolumn rlike '.*(33|44)'; 
it won't work as java with '\\d~...' or '\d~'