Свинья соответствует не совпадающим цифрам - PullRequest
0 голосов
/ 01 октября 2019

Я часами ломал голову над этим. Документы Pig говорят, что он использует регулярное выражение Java, но когда я пробую то же самое в Java с тем же REGEX, он работает, как и ожидалось.

У меня есть эти данные:

id=6139406,ci=6139407,corr_id_=8c0c7700f95aa
id=6139106,ci=6139107,corr_id_=0e89749_df942a
id=6139906,ci=6139907,corr_id_=09ea6&f6cf94cb
id=6141100,ci=6141101,corr_id_=42ab372dfacd5
id=6141100,ci=6141101,corr_id_=asssddsA01

И это простоСвинья пытается фильтровать на основе буквенно-цифровых идентификаторов;

A = LOAD 'users.dat' USING PigStorage(',') AS (id:chararray, tid:chararray, corr_id:chararray); -- loading data

B = FILTER A BY ($2 matches 'corr_id_=[a-zA-Z0-9]*'); 
DUMP B; 

Все работает нормально, пока я не попытаюсь ввести числовую часть регулярного выражения. Как только я ставлю 0-9 или \ d, оба из которых действительны в Java, он не может найти совпадение.

Что мне здесь не хватает?

1 Ответ

0 голосов
/ 01 октября 2019

Синтаксис '.*expr.*'. В вашем случае, поскольку начало строки зафиксировано, вам понадобится только. * В конце.

B = FILTER A BY ($2 matches '(corr_id_=[a-zA-Z0-9]).*'); 
...