2016-04-07 8 views
0

"2015 Premium aylık B Standard Premium, $ 104.90" dizesinde "Standard Premium" dizesini bulmaya çalışıyorum ancak bunu Pig'de yapamıyorum.Domuz Kalıbı Eşleştirmesi

PlanServiceEng = FILTER PlanService BY language == 'English' and contractid !='' and planid !='' and segmentid !='' and benefit !='' and (benefit matches '.*Premium.*'); 

cevap

0

Eğer EqualsIgnoreCase() kullanılamaz: Ben çalıştığını regex altında sadece 'Premium' bulmaya çalışıyorum zaman

ben regex

`PlanServiceEng = FILTER PlanService BY language == 'English' and contractid !='' and planid !='' and segmentid !='' and benefit !='' and (benefit MATCHES '.*Standard Premium is.*');` 

ile çalışıyorum ama am işlev

İki dizeyi karşılaştırmak ve eşit olup olmadığını doğrulamak için EqualsIgnoreCase() işlevi kullanılır. Her ikisi de eşitse, bu işlev Boolean değerini döndürür, aksi takdirde false değerini döndürür.

PlanServiceEng = FOREACH PlanService GENERATE (language,benefit), EqualsIgnoreCase(benefit, 'Standard Premium is'); 

Yoksa ifade işlevlerinin REGEX_EXTRACT veya REGEX_EXTRACT_ALL deneyebilirsiniz. Eğer Burada %s bunu bir maç olacak başka bir alan katacak

b = FOREACH a GENERATE $0,$1,REGEX_EXTRACT_ALL($1,'.*%s.*') ; 

Bu ifade eşleştirmek istediğiniz metni şöyle olur bu işler ve bu alan ise

Ben REGEX ..check ile bir şeyler denedik (). Böylece eşleşen verileri elde etmek için bir filtre çalıştıracağız.

filtered = FILTER b BY $2 is not null;