请找到我的表格说明,serde和日志格式。
create table temp.rawserversidedata
(
ip varchar(65000),
dt varchar(65000),
apiname varchar(65000),
appname varchar(65000),
contentid varchar(65000),
eid varchar(65000),
version varchar(65000),
uid varchar(65000),
model varchar(65000)
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
"input.regex" = "([0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,})(.*)(getstream.*)(appname=.*)(content_id=[0-9]{1,}.*)(eid=[0-9].*)(version=[(\d+\.?)]*)(.*uid=[0-9]{1,})(.*model=[^\"]*)",
"output.format.string" = "%1$s %2$s %3$s %4$s %5$s %6$s %7$s %8$s %9$s")
STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat';
REGEX : ([0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,})(.*)(getstream.*)(appname=.*)(content_id=[0-9]{1,}.*)(eid=[0-9].*)(version=[(\d+\.?)]*)(.*uid=[0-9]{1,})(.*model=[^\"]*)
日志格式-两个有效记录。
123.236.122.18|"-"|-|2016-07-21T23:59:24+08:00|GET|http|isarrs.go.le.com|"/sarrs/apigetstream_json.so?sign=9fc79acfa5a5de4aa2819672247436da&appname=Levidi&content_id=6575672&appfrom=letv&lc=867466026357389&platform=1&user_setting_country=IN&clientos=6.0.1&sales_area=IN&eid=0&version=1.1.3&lang=en_GB&uid=3214761836&resolution=1080*1920&model=Le+X526"|HTTP/1.1|200|450|447|202|"-"|"Dalvik/2.1.0 (Linux; U; Android 6.0.1; Le X526 Build/IIXOSOP5801607082S)"|"10.121.152.15:8080"|"0.717"|0.717
103.14.185.15|"-"|-|2016-07-21T23:59:18+08:00|GET|http|isarrs.go.le.com|"/sarrs/apigetstream_json.so?sign=b097e1fe9b280e658c909886971ab818&appname=Levidi&content_id=6575672&appfrom=letv&lc=867466026096383&platform=1&user_setting_country=IN&clientos=6.0.1&sales_area=IN&eid=0&version=1.1.3&lang=en_GB&uid=1712386504&resolution=1080*1920&model=Le+X526"|HTTP/1.1|200|450|447|202|"-"|"Dalvik/2.1.0 (Linux; U; Android 6.0.1; Le X526 Build/IIXOSOP5801607082S)"|"10.121.152.30:8080"|"0.684"|0.684
问题是,虽然我的regex是正确的,在rubular.com上测试过,但我不能正确地上传数据,因为配置单元没有正确地将多行日志作为单个记录处理。我尝试了regex和日志的一个子集来进行单个解析,结果很好。
我试着玩弄房子 textinputformat.record.delimiter
但它不起作用。请给我一个正确的方法 textinputformat.record.delimiter
,从而实现正确的解析。
1条答案
按热度按时间9udxz4iz1#
在你需要使用的Hive里
"\\"
无论你在哪里使用"\"
在正则表达式中