如何使用RegexSerDe将日志文件加载到Hive表中?

时间:2017-06-11 18:32:33

标签: regex hadoop hive

我有一个具有以下格式的日志文件,我想从中提取ip, datetime and uri并加载到表中。

64.242.88.10 - - [07/Mar/2004:17:09:01 -0800] "GET /twiki/bin/search/Main/SearchResult?scope=text&search=Joris%20*Benschop[^A-Za-z] HTTP/1.1" 200 4284

我可以通过将日志文件行作为单个字符串加载到表中,如下所示并使用regexp_extract来实现。

create table logs( line string);

load data local inpath '.../mylog.log' into table logs;

select regexp_extract(line, '(.*) (- -) \\[(.*) -.*\\] \\"GET (.*)\\?',1),--ip regexp_extract(line, '(.*) (- -) \\[(.*) -.*\\] \\"GET (.*)\\?',3),--datetime regexp_extract(line, '(.*) (- -) \\[(.*) -.*\\] \\"GET (.*)\\?',4) --uri from logs limit 10;

+---------------+-----------------------+--------------------------------------------+--+
|      _c0      |          _c1          |                    _c2                     |
+---------------+-----------------------+--------------------------------------------+--+
| 64.242.88.10  | 07/Mar/2004:17:09:01  | /twiki/bin/search/Main/SearchResult        |
| 64.242.88.10  | 07/Mar/2004:17:10:20  | /twiki/bin/oops/TWiki/TextFormattingRules  |
+---------------+-----------------------+--------------------------------------------+--+

我想要做的是创建一个指定SerDe属性的表,并在不使用regexp_extract函数的情况下加载它。我尝试了以下,它没有工作。

create table logs (
    ip string,
    day timestamp,
    url string)
    row format serde 'org.apache.hadoop.hive.serde2.RegexSerDe'
    with serdeproperties ("input.regex" = 
    "(.*) [^- - \[](.*) [^-.*\]] \"([^GET].*\?)");

load data local inpath ".../mylog.log" into table logs; 

我感谢一些帮助和指导。

1 个答案:

答案 0 :(得分:1)

  1. day不能是时间戳,因为它不是ISO格式(yyyy-MM-dd HH:mm:ss
  2. 应使用双反斜杠(\\
  3. 进行转义
  4. 正则表达式应涵盖整个记录(在本例中以.*结束)
  5. create external table logs 
    (
        ip  string
       ,day string
       ,url string
    )
        row format serde 'org.apache.hadoop.hive.serde2.RegexSerDe'
        with serdeproperties ("input.regex" = "(\\S+).*?\\[(.*?)\\s.*?(/.*?)\\?.*")
    ;
    
    select * from logs
    ;
    
    +--------------+----------------------+-------------------------------------+
    |      ip      |         day          |                 url                 |
    +--------------+----------------------+-------------------------------------+
    | 64.242.88.10 | 07/Mar/2004:17:09:01 | /twiki/bin/search/Main/SearchResult |
    +--------------+----------------------+-------------------------------------+