Hive 正则
分析日志经常要用到正则来提取需要分析的关键信息,其中需要注意的就是,Hive本身史用Java写的,所以HQL里面的正则和Java里面史一样的,但是具体在使用的时候,会碰到很多问题,就是转义的问题,总结了一下在各个语言中使用HQL时正则的不同情况。
Hive Cli
平时使用的时候,很多情况下都是在Hive Cli客户端中使用,这里和正常的正则需要稍微有一些区别,例如匹配数字,正常情况下就\d
,但是在Hive Cli中需要注意,应该使用\\d
。
1 | select |
Shell
还有一种更为常见的使用场景,就是在Shell脚本中使用,Shell脚本中又涉及到单引号和双引号的区别,单引号史强引用类型,\
不会被转义,但是双引号字符串则会转义,例如:
1 | reg_str1='.*id=(\\d*).*' |
这两个正则表达式是一样的,其实确认你的HQL正则表达式是否有用,可以先用echo在sudo前面看看,如果输出的史\\d
则说明有用
Python
有时候需要在Python中执行HQL,好像Hive并不支持Python接口,所以我采取的是在Python中执行Shel命令
1 | # bash_cmd为Shell命令 |
在Python中我定义来一个sql
1 | sql = """ |