将日志文件放入Hive
我有一个没有固定格式的文件,里面的数据像这样:
file.log:
2014-03-13 US Texas 334 4.985
2014-03-13 US Minnesota 534 6.544
这个日志文件的字段不是用制表符分开的,有些字段是用制表符分开的,有些则不是。
我该怎么把它放到一个Hive表里呢?
Hive表的结构是:
create table file (dateFact string, country string, state string, id int, value string);
我该怎么用Python或者Hadoop命令把这个日志文件加载到Hive表里呢?
谢谢!
2 个回答
1
使用RegexSerDe,你可以用\s+
来匹配多种空白字符,比如单个空格、多个空格和制表符(Tab键)。
我现在没有Hive实例可以测试,但你可以从下面的代码中理解这个概念。
CREATE TABLE file.log (
dateFact STRING,
country STRING,
state STRING,
id STRING,
value STRING
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
"input.regex" = "([0-9]{4}-[0-9]{2}-[0-9]{2})\s+(\w+)\s+(\w+)\s+(\d+)\s+([\d.]+)",
"output.format.string" = "%1$s %2$s %3$s %4$s %5$s"
)
STORED AS TEXTFILE;