一Hive用正则表达式处理稍复杂数据的导入文件
A正则解析器RegexSerDe
regextserde用法
使用该解析器来处理Apche Web日志数据的一个例子:这个例子好好读读
处理web日志
这个例子也说明了要想使用该解析器是需要导入相应的jar包的。
关于output.format.string" = "%1s s %2ss %3s s %4ss %5s s %6ss %7s s %8ss %9$s
String.format %1s
其中%1 %2表示第1,2个占位符。$s表示用字符串形式替代占位符,是一种格式化输出。
二使用hive处理csv格式文件
csv:逗号分隔值文件
我们右键以记事本打开要处理的csv文件。这里以用八爪鱼爬下来的fang4.csv为例
从图上可以看到,csv数据实际上以逗号作为字段分隔符,但是一般不要直接
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','简单的这样指定分隔符来建表。因为有两个问题:
1.如果列值自身存在逗号,会导致错误
2.有些字符串是加了引号的。
所以如果只是以逗号为分隔符来简单建表的话,会导致一个字段被截成好几个,并且引号也去不掉。阿里云链接里有对比例子。
可以看到这里的csv文件里,只要列值里有逗号的,全都加了引号引起来了,代表是一个整体的字符串。
用OpenCSVSerDe来处理CSV文件。
参考文档:阿里云csv文件格式讲解
csv serde介绍
从https://github.com/ogrodnek/csv-serde/downloads上下载csv-serde-1.1.2.jar包。(用谷歌浏览器下载)
把这个jar包上传到hive下的lib目录里
下面就正式开始处理文件。
1.上传csv文件到linx本地
2.进行编码转换,防止一会出现中文乱码。在csv文件所在目录下将文件转成utf-8编码集
为了防止处理的时候乱码,先把csv格式文件进行类型转换,转换成utf-8格式。
$ iconv -f