Hive 建表结合正则表达式的案例
来源:互联网 发布:软件交易会 编辑:程序博客网 时间:2024/06/05 18:14
@首先:先回顾一下正则表达式:
(\"[^ ]\") (\"-[^ ]\")
^ 一个字符串的开始
$ 一个字符串的结束
"^The" "There" "The cat"
$e 以字符e结尾的字符串
一个或者一序列字符重复出现的次数
* 0次或多次 {0,}
+ 1次或多次 {1,}
? 至多出现一次 0次或者1次 {0,1}
{}使用范围,用大括号,表示重复出现次数的范围
“ab{2}” 表示一个字符串有一个a跟着2个b
ab{2,4}
[] 表示某些字符允许在一个字符串中某一个特定位置出现
^[a-zA-Z]:标表示一个以字母开头的字符串
| 表示“或”操作
hi|hello 一个字符串里有"hi"或者"hello"
(b|cd)ef 表示"bef"或"cdef"
[^] 表示不希望出现的字符
$ () "" 希望匹配这些字符的时候,应该在特殊字符前面加转义字符"\"
example:下面这组数据有11个字段,分组写了11个正则分别对应相应的字段:
(\"[^ ]*\") (\"-|[^ ]*\") (\"[^\]]*\") (\"[^\]]*\") (\"[0-9]*\") (\"[0-9]*\") (-|[^ ]*) (\"[^ ]*\") (\"[^\"]*\") (\"-|[^ ]*\") (\"[^ ]*\")
"27.38.5.159" "-" "31/Aug/2015:00:04:37 +0800" "GET /course/view.php?id=27 HTTP/1.1" "303" "440" - "http://www.ihaodian.com/user.php?act=mycourse" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36" "-" "learn.ibeifeng.com"
@根据字段开始建表
CREATE TABLE apachelog (
remote_addr string,
remote_user string,
time_local string,
request string,
status string,
body_bytes_set string,
request_body string,
http_referer string,
http_user_agent string,
http_x_forwarded_for string,
host string
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'<---------这是定义的序列化和反序列话的规则---->
WITH SERDEPROPERTIES ( <---------这是定义的正则在表创建的时候配置好---->
"input.regex" = "(\"[^ ]*\") (\"-|[^ ]*\") (\"[^\]]*\") (\"[^\]]*\") (\"[0-9]*\") (\"[0-9]*\") (-|[^ ]*) (\"[^ ]*\") (\"[^\"]*\") (\"-|[^ ]*\") (\"[^ ]*\")"
)
STORED AS TEXTFILE;
@注意:这里面的字段数据都有双引号,日期格式不是常见的,所有我们要将双引号去掉,然后将日期转换成一种好看的日期类型;
那么我们怎么做呢?
在Hive的内置函数并没有提供这样的功能,所以我们只能自己写两个函数自定义到HIve中去使用:
在很多情况下我们只需要使用这种函数一次,所以创建临时函数是相当实用的;
@创建临时函数的方式一:
//将导出的jar文件加入到hive的calss path
add jar /home/user01/RemoveQuote.jar;
//创建临时函数 removequote--可以自定义 但是必须指定对应的带包名的主类
CREATE TEMPORARY FUNCTION removequote as 'hive.RemoveQuoteUDF';
//查看创建的函数是否存在
show functions;
//将导出的jar文件加入到hive的calss path
add jar /home/user01/TimeFormat.jar;
Added /home/user01/TimeFormat.jar to class path
Added resource: /home/user01/TimeFormat.jar
//创建临时函数 注意:临时函数名称不能和内置函数名相同
CREATE TEMPORARY FUNCTION TimeFormat as 'hive.TimeFormatUDF';
@创建临时函数的方式二(理论上将函数传到hdfs中,他的调用会更快点,对于大量数据的查询有着更快的速度,但是喜欢慢节奏的人就不要麻烦了,晃晃悠悠结果也能出来,hdfs不都是这样):
在hive中使用(第二种方式)
将linux中的jar包上传到自定义位置的hdfs的文件系统
hive (mydb)> create [temporary] function my_lower as 'vampire.test.hive.udf.Lower' using jar 'hdfs/path';
注:关于'hdfs/path' :
hdfs://hostname:8020/自定义的文件位置
@使用removequote和timeformat函数,同时进行去除双引号和格式化时间最后得出的结果.
select removequote(remote_addr) remote_addr,timeformat(time_local) time_local,request from apachelog_extract limit 2;
27.38.5.159 2015-08-31 00:04:37"GET /course/view.php?id=27 HTTP/1.1"
27.38.5.159 2015-08-31 00:04:37"GET /login/index.php HTTP/1.1"
- Hive 建表结合正则表达式的案例
- 关于hive引用正则表达式建表的格式
- 正则表达式的使用案例
- 正则表达式的经典案例
- 正则表达式常用的案例
- 正则表达式的常用案例
- 正则表达式的一些案例
- sscanf()和正则表达式的结合
- URL结合正则表达式的应用
- @正则表达式---nl和sed的结合@
- #hive_正则表达式#JAVA的正则表达式案例详解
- hive_正则表达式|JAVA的正则表达式案例详解<转>
- #hive_正则表达式#JAVA的正则表达式案例详解
- #hive_正则表达式#JAVA的正则表达式案例详解
- 【正则表达式】个人积累的正则表达式案例
- replace()结合正则表达式
- Java中正则表达式的分割案例
- Java中正则表达式的分割案例
- java序列化和反序列化以及序列化ID的作用分析
- Nodejs cluster模块深入探究
- arm neon 数据类型介绍
- java开发程序员必备技能
- E
- Hive 建表结合正则表达式的案例
- python type函数和isintance函数 获取数据的数据类型
- 学习笔记—HTML基础
- YII2(一)用YII2创建、迁移数据表 migrations
- SHUOJ Fibonacci数列
- 【noip 2015】联合权值
- 类的大小(sizeof)
- css四种导入方式
- 使用Makefile终端参数实现跨平台编译控制