2016-11-10 3 views
0

Ich versuche, mit der folgenden AbfrageHive Query Language RLIKE Abfrage

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

Hier einige Beispieldaten in 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 

jedoch abzufragen, das Ergebnis ist immer leer.

Wie in Hive Query Language Manual angegeben,

NULL, wenn A oder B NULL, TRUE, wenn eine (möglicherweise leere) Teilkette von A die Java regulären Ausdruck B übereinstimmt, ansonsten FALSE. Zum Beispiel, 'foobar' RLIKE 'foo' ergibt TRUE und so 'foobar' RLIKE '^ f. * R $'.

Ich habe die RegExp in Java getestet, es funktioniert gut. Auch versucht, \ durch \\ zu ersetzen, und versuchte, ~ durch \~ zu ersetzen, aber es gab kein Glück.

Die Java-Code I-Test verwendet wird, ist wie folgt

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

Könnte jemand sagen, was mit der Abfrage falsch ist? Vielen Dank!

+0

Es stellt sich heraus, dass Bienenstock nicht unterstützt ' \ d'. Bezweifle auch, ob es andere vordefinierte Zeichen unterstützt – Jenson

Antwort

1

Ich glaube, Sie auf diese Weise Tery kann

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~'