问题描述
我有一个非结构化文件,其数据如下:
file.log:
2014-03-13 US Texas 334 4.985
2014-03-13 US Minnesota 534 6.544
日志文件不是用制表符分隔的,因为有些字段是用制表符分隔的,而有些则不是。
如何将其放入Hive表中?
配置单元表架构为:
创建表文件(dateFact字符串,国家/地区字符串,状态字符串,id int,值字符串);
如何使用Python和Hadoop命令将日志文件加载到Hive表中?
谢谢!
1楼
这个问题可能是重复的。
请检查此以及此 。
根据上述2个链接,您不能有多个定界符,不支持。
但是有一个解决方法。
可以通过使用RegExSerde
来实现。
您需要找出适合您业务需求的正则表达式模式,并将其保留在serde属性中。
2楼
使用RegexSerDe,您可以使用\\s+
来匹配多个空白类型(单个空格,多个空格,制表符)。
我没有在我前面的蜂巢实例进行测试,但是您应该从下面的代码中得到启发。
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;