将日志文件放入Hive

时间:2014-03-23 19:43:43

标签: python hadoop hive

我有一个非结构化文件,其中包含以下数据:

file.log:

2014-03-13 US Texas   334    4.985
2014-03-13 US    Minnesota   534    6.544

日志文件不是制表符分隔符,因为某些字段是制表符分隔的,而有些字段则不是。

如何将其放入Hive表?

Hive表架构是:

创建表文件(dateFact string,country string,state string,id int,value string);

如何使用Python和/或Hadoop命令将日志文件加载到Hive表中?

谢谢!

2 个答案:

答案 0 :(得分:3)

问题可能是重复的。

请检查此link以及此blog

根据以上2个链接,您不能拥有多个分隔符,不支持。

但是有一个解决方法。可以使用RegExSerde来实现。

您需要找出适合您业务需求的正则表达式模式,并将其保留在serde属性中。

答案 1 :(得分:1)

使用RegexSerDe,您可以使用\s+来匹配多个空格类型(单个空格,多个空格,制表符)。

我没有在我面前测试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;