2014-01-07 4 views
0

에 나는 돼지에 하이브 문 아래를 변환하려고 :CONVESION 하이브에서 PigLatin

max(substr(case when url like 'http:%' then '' else url end,1,50)) 

위 대한 나의 돼지 문은 다음과 같습니다 데이터의 일부

url_group = GROUP data by (uid); 
max_substr_url= FOREACH url_group generate SUBSTRING(MAX(((Coalesce(data.url) matches '.*http:%.*') ? '' : Coalesce(data.url))), 0, 49); 

의 URL null도 가능 그래서 데이터가 null이거나 비어있는 경우 빈 문자열을 반환하는 Coalesce (String)라는 돼지 UDF를 작성했습니다. 데이터가 null가 아니거나 비어 있지 않으면 문자열을 반환합니다.

위의 돼지 진술은 많은 문제를 일으키고 다양한 옵션/방법을 시도했지만 아무런 효과가 없었습니다. 누구든지 이것을 구현하는 방법에 대한 아이디어가 있습니까? 도와주세요. 사전

+2

"문제가 많은", "아무 일 없다"- 구체적 –

+0

돼지 그래서'%가''에 * HTTP 필요하지 않습니다 matches''에 대한 자바 정규 표현식에 사용 : % *를'... 또한 왜 MAX에서 하위 문자열을 돼지와 바꿨습니까? 'MAX (SUBSTRING ...' –

+0

글쎄, 나는 돼지의 문장을 작동시키는 데 많은 방법을 시도했지만 아직 행운이 없다. – user3167832

답변

0

에서

덕분에 당신은 당신이 data 부대에있는 각 튜플에 문자열 변환을 할 수 있도록 다음 nested FOREACH를 사용하여 변환 된 가방의 MAX을 할 것입니다.

A = GROUP data by (uid); 
B = FOREACH url_group { 
    -- MAX needs a one column bag 
    transformed = FOREACH data 
        GENERATE SUBSTRING((Coalesce(url) matches '.*http:.*' ? '' : Coalesce(url)), 0, 49); 
    GENERATE group AS uid, MAX(transformed) ; 
} 
+0

답장을 보내 주셔서 감사 드리며 작동시키고있다. – user3167832

관련 문제