将日志文件放入Hive

2 投票
2 回答
1351 浏览
提问于 2025-04-17 23:33

我有一个没有固定格式的文件,里面的数据像这样:

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 个回答

3

这个问题可能是重复的。

请查看这个 链接 和这个 博客

根据这两个链接的内容,你不能使用多个分隔符,这个功能是不支持的。

不过,有一个解决办法。你可以使用 RegExSerde 来实现。

你需要为你的业务需求找出一个正则表达式模式,并把它放在serde属性里。

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;

撰写回答