使用pig的原始日志解析

xuo3flqw  于 2021-06-21  发布在  Pig
关注(0)|答案(2)|浏览(288)

我想用pig解析原始日志。
以下是数据示例:

Thu Jul 13 06:02:36.157 2014 INFO:  pid 018 8: 2:81924:=[]| A=[100]| B=[]| C=[0] | D=[32]| E=[1]| F=[~1~0~1~0]| G= | H=[14]| I=[~0~0~0~1~0~0]| J=[1]| K=[0]| L=[0]

Thu Jul 13 16:42:36.213 2014 INFO:  pid 08 8: 2:81931: Dispatcher:UID=1F4, A=32, B=0, F=2, H=2, J=0, L=414

Thu Jul 03 16:42:36.646 2014 WARNING:  pid 028 8: 2:81939: no data found

预期产量:

(date, A, H, L)

(Thu Jul 13 6:02:36.57 2014, 100, 14, 0)
(Thu Jul 13 16:42:36.13 2014, 32, 2, 414)

示例脚本:
数据没有正确分隔(如制表符或逗号),因此我尝试使用textloader()加载数据。因为我需要从'info'中提取信息,所以要根据信息和警告过滤日志。

raw_logs = LOAD 'test1.log' USING TextLoader() as (line:chararray);

info = FILTER raw_logs BY (line matches '.*INFO.*');

warning = FILTER raw_logs BY (line matches '.*WARNING.*');

data = FOREACH info GENERATE SUBSTRING(line, 0, 28) AS date, REGEX_EXTRACT(line, 'A=([0-9]*)',1) AS A, REGEX_EXTRACT(line, 'H=([0-9]*)',1) AS H, REGEX_EXTRACT(line, 'L=([0-9]*)',1) AS L;

输出:

(Thu Jul 13 06:02:36.157 2014 ,,,)
(Thu Jul 13 16:42:36.213 2014 ,32,2,414)

我的正则表达式无法从[]中提取。另外,我尝试了flatten和tokenize函数,但未能获得所需的输出。谁能给我建议一下解决问题的正确方法吗。
还有一件事,有没有可能为regex\u extract\u all函数编写一个正则表达式,该函数适用于所有3种情况,并提取所有字段信息,如pid、uid和其他字段等。

zsbz8rwp

zsbz8rwp1#

试试这个,

result = FOREACH info GENERATE SUBSTRING(line, 0, 28) AS date, REGEX_EXTRACT(line, 'A=\\[*([0-9]*)\\]*',1) AS A, REGEX_EXTRACT(line, 'H=\\[*([0-9]*)\\]*',1) AS H, REGEX_EXTRACT(line, 'L=\\[*([0-9]*)\\]*',1) AS L;

希望它能为我工作。。。

ar7v8xwq

ar7v8xwq2#

我认为你需要逃离 [] ```
data = foreach info generate ..., REGEX_EXTRACT(line, 'A=\[([0-9]+)\]', 1)
, REGEX_EXTRACT(line, 'H=\[([0-9]
+)\]', 1)
, REGEX_EXTRACT(line, 'L=\[([0-9]*+)\]', 1)

相关问题