2014-07-17 1 views
0

나는 다음과 유사한 돼지 스크립트가 :PIG - 문자열을 매개 변수에 연결 하시겠습니까?

a = LOAD 'feedname.hourly_data' 
USING org.apache.hcatalog.pig.HCatLoader(); 
b = FILTER a BY dt=='$date{00}'; 
c = GROUP b ALL; 
d = FOREACH c GENERATE COUNT(b); 
dump d; 

스크립트는 다음 인수와 함께 실행됩니다

a = LOAD 'feedname.hourly_data' 
USING org.apache.hcatalog.pig.HCatLoader(); 
b = FILTER a BY dt=='2014070800'; 
c = GROUP b ALL; 
d = FOREACH c GENERATE COUNT(b); 
dump d; 
:이 스크립트는 하드 코딩 DT 값으로 작동

pig -useHCatalog -p date=20140708 my_script.pig 

그러나 date=20140708 매개 변수를 전달한 후 쿼리를 실행하면 쿼리 결과가 0으로 반환됩니다. 왜 이런 일이 일어나는 지 아는 사람이 있습니까? 말할만한 정보가 충분하지 않다면 무엇을 테스트해야합니까?

답변

2

use the -dryrun option 매개 변수 대체 후 스크립트가 어떻게 보이는지 확인할 수 있습니다. 그것은 당신이 예상대로 필터링하는 경우 알려줍니다.

매개 변수 이름에 문자가 올 바르지 않으면 (예 : /) Pig는 문자열 내부의 매개 변수를 처리 할 수없는 것으로 보입니다. 대신, 귀하의 경우에는 CONCAT을 사용할 수 있어야합니다 :

b = FILTER a BY dt==CONCAT('$date', '00'); 
+0

감사합니다. dryrun 옵션을 사용하면 알 수 없습니다. 대체 출력을 보면 내 '$ date {00}'은 (는) '20140708 {00}'(으)로 확장되며 잘못되었습니다. 돼지는'$ dt == $ {date} 00;'에 의해 b = FILTER a == $ {date} 00;'이 작동하지 않는다고해도 - 돼지는'Syntax error, '$'근처의 예상치 못한 기호로 불평하지만'b = FILTER a BY dt == '$ {date} 00';',하지만 $ {date} 00은 확장되지 않습니다. – SheerSt

+0

Bummer. 나는 너에게 다른 대안을 제안했다. –

+0

제안 해 주셔서 감사합니다. 나는 그것을 시도하고 나에게 메모리 오류를 준다. (오류 org.apache.pig.tools.grunt.Grunt - 오류 2998 : 처리되지 않은 내부 오류. GC 오버 헤드 한계를 초과했다.)'% default MIN_DATE \'echo $ {00}과 (23) 각각을 반향 출력합니다. – SheerSt

관련 문제