Hive查询语言RLIKE查询

时间:2016-11-10 23:15:04

标签: regex hive

我尝试使用以下查询进行查询

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中所述,

  

如果A或B为NULL,则为NULL;如果A的任何(可能为空)子字符串与Java正则表达式B匹配,则为TRUE,否则为FALSE。例如,' foobar' RLIKE' foo'评估为TRUE,foobar' RLIKE' ^ f。* r $'。

我在Java中测试了RegExp,它运行正常。还尝试将\替换为\\,并尝试将~替换为\~,但没有运气。

我以前测试的Java代码如下

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

有人能说出查询有什么问题吗?谢谢!

3 个答案:

答案 0 :(得分:1)

我认为你可以这样做

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

答案 1 :(得分:0)

尝试更简单的方法,看看它是否有效:

\d[\S]*(33|44)

演示:https://regex101.com/r/3tQxv6/1

答案 2 :(得分:0)

您的开始和结束刻度线不匹配。您有一个反引号和一个单引号('`