我有一个非结构化文件,其中包含以下数据:
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表中?
谢谢!
答案 0 :(得分:3)
问题可能是重复的。
根据以上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;