Finden Sie meine Tabelle Beschreibung, Serde und Protokollformat.HIVE REGEX RECORD DELIMITER NULL WERTE IN TABELLE
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=[^\"]*)
Protokollformat - zwei gültige Datensätze.
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
Problem ist, dass, obwohl meine regex richtig, auf rubular.com getestet ist, kann ich nicht die Daten korrekt laden, weil hive nicht richtig mehrzeilige Protokolle als Einzelsatzverarbeitung ist. Ich habe versucht, eine Teilmenge der Regex und Protokolle für einzelne Parsing, und das hat gut funktioniert.
Ich habe versucht, mit der Eigenschaft textinputformat.record.delimiter
Aber es funktioniert nicht herumspielen. Bitte schlagen Sie mir eine korrekte Möglichkeit vor, textinputformat.record.delimiter
zu überschreiben, um eine korrekte Analyse zu erreichen.