背景:

前几天拿来apache日志,用hive的正则进行匹配,发现匹配出来的字段算是NULL,但是我用RegexBuddy工具显示能够匹配的到啊!例子如下(我拿正常的apache日志来比较,我的apache日志格式被更改过)

1、apache日志格式:

127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326

2、正则表达式:

([^ ]*) ([^ ]*) ([^ ]*) (-|\[[^\]]*\]) ([^ \"]*|\"[^\"]*\") (-|[0-9]*) (-|[0-9]*)(?: ([^ \"]*|\".*\") ([^ \"]*|\".*\"))?

3.工具匹配后结果:


4.把正则拿到hive里面做create table操作,结果匹配出的全是null,之后查阅了资料吧正则写成如下格式就可以匹配了(多了转义符号):

主要原因有两个之后会详细讲解。

原因:

1、首先理解下转义字符,就是把具有特殊意义的字符例如?或[等。编程"单纯"的字符串,例如"\?"就表示'?'本身。

2、但是在方括号里面情况有点复杂:

如果你想匹配*?+这样的字符,第一点想到的是[\*\?\+];

首先要理解的是,在hive中‘\’本身就代表转义字符,这与原有正则里面的转义,也有点不同,意思是:要经过两次转义后(hive

和正则)才会匹配,我们在背景里面单一的做了正则的转义,而没有做hive的转义(这里面有点混乱,需要读者自己理清楚),但是在再加上一个转义符号后,就变得正常。我们的例子来说正常的hive写法应该为[\\*\\?\\+]。

这里只是基本的一些想法,也是看了别人的文章总结的:

Oracle,green plum,hive中正则表达式的元字符转义比较杂谈

在处理后正则语法就算成功,但是还是匹配不到字段,我用了最简单的正则也不能够匹配字符串里面的字段,后来做个测试,原因如下:
hive的正则表达式只支持全匹配,意思是:当读入一行日志做正则匹配时,必须从这一行的开始进行匹配到这一行的结束,不能够从中间进行匹配,就算只要中间的字段,也要用‘.’吸收掉前的或后面的”全部“字符。
 
错误的匹配方法(没有考虑hive转义,只有正则转义时,只匹配中间的部分):
正确的方法:
 
 
 
 
 
 
分类: hadoop小象

hive 中的正则表达式的更多相关文章

  1. hive中,lateral view 与 explode函数

    hive中常规处理json数据,array类型json用get_json_object(#,"$.#")这个方法足够了,map类型复合型json就需要通过数据处理才能解析. exp ...

  2. PHP中有关正则表达式的函数集锦

    之前学正则表达式的目的是想从网上抓取点小说啊,文档啊,还有获取相应的视频连接然后批量下载.当时初学PHP根本不知道PHP有专门抓包的工具,就像Simple_html_dom.php(在我的其他博文中有 ...

  3. JavaScript中的正则表达式(终结篇)

    JavaScript中的正则表达式(终结篇) 在之前的几篇文章中,我们了解了正则表达式的基本语法,但那些语法不是针对于某一个特定语言的.这篇博文我们将通过下面几个部分来了解正则表达式在JavaScri ...

  4. Coursera-Getting and Cleaning Data-week4-R语言中的正则表达式以及文本处理

    博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html Thursday, January 29, 2015 补上第四周笔记,以及本次课程总结. 第四周 ...

  5. 9.JAVA中的正则表达式

    一.JAVA中的正则表达式 1.概念:以某种特定的方式描述字符串 1.Java中正则表达式的规则 ?          #{0,1}-?有一个-或者没有 \\           #表示一个" ...

  6. SparkSQL读取Hive中的数据

    由于我Spark采用的是Cloudera公司的CDH,并且安装的时候是在线自动安装和部署的集群.最近在学习SparkSQL,看到SparkSQL on HIVE.下面主要是介绍一下如何通过SparkS ...

  7. Python::re 模块 -- 在Python中使用正则表达式

    前言 这篇文章,并不是对正则表达式的介绍,而是对Python中如何结合re模块使用正则表达式的介绍.文章的侧重点是如何使用re模块在Python语言中使用正则表达式,对于Python表达式的语法和详细 ...

  8. hive中rcfile格式(收藏文)

    首先声明,此文是属于纯粹收藏文,感觉讲的很不错. 本文介绍了Facebook公司数据分析系统中的RCFile存储结构,该结构集行存储和列存储的优点于一身,在MapReduce环境下的大规模数据分析中扮 ...

  9. hive中分析函数window子句

    hive中有些分析函数功能确实很强大,在和sum,max等聚合函数结合起来能实现不少功能. 直接上代码演示吧 原始数据 channel1 2016-11-10 1 channel1 2016-11-1 ...

随机推荐

  1. 基于emoji 国际通用表情在web上的输入与显示的记录

    定义: emoji 即国际通用表情 场景: 1,ios,android,wp上emoji表情输入与显示 2,web也需作为支撑平台对emoji表情就行输入与显示(解析) 问题: 1,app端输入的表情 ...

  2. Java Calender 类详解

    一.   如何创建 Calendar 对象 Calendar 是一个抽象类, 无法通过直接实例化得到对象. 因此, Calendar 提供了一个方法 getInstance,来获得一个Calendar ...

  3. solr 加载 停用/扩展词典

    startup.bat 停止词典的效果

  4. 第十三章 ReentrantLock 简介

    Java 5.0 提供的新的加锁机制:当内置加锁机制不适合时 , 作为一种可选择的高级功能 一个可重入的互斥锁 Lock,它具有与使用 synchronized 方法和语句所访问的隐式监视器锁相同的一 ...

  5. MySQL order by的实现

      1.使用索引的已有顺序 2.filesort算法 filesort算法的执行流程     filesort相关的参数 sort_buffer_size 算法排序缓冲区的大小,线程级缓存 max_l ...

  6. Python中Gradient Boosting Machine(GBM)调参方法详解

    原文地址:Complete Guide to Parameter Tuning in Gradient Boosting (GBM) in Python by Aarshay Jain 原文翻译与校对 ...

  7. Glide图片加载库的使用

    http://www.cnblogs.com/whoislcj/p/5558168.html这篇文章写得很详细,我这里简单说一些 1.app的build.gradle的dependencies里面添加 ...

  8. 研究CondItem

  9. TCP/IP 笔记 - 概述

    Effective communication depends on the use of a common language. 有效沟通取决于使用共同的语言 . TCP/IP协议族 一系列相关协议的 ...

  10. 理解 Generator 的执行

    Generator & yield 开局官宣:sec-generatoryield,这是对yield的介绍. 同样巴拉巴拉列了9条,将以上链接中的说明简化成3条: 1. 在GeneratorF ...