2016-07-06 2 views
1

하이브 0.13.0을 사용하여 템플릿에 대한 변수를 평가 한 다음 결과 하이브 코드를 즉시 실행하고 싶습니다. 임시 중간 파일을 사용하지 않는 것이 좋습니다.파이프 envsubst가 하이브로 출력

template.hql에게 쉘에서

SELECT COUNT(*) FROM ${TABLE}; 

:

export TABLE=DEFAULT.FOOTABLE 
envsubst < template.hql | hive 

인가를 여기

는 내가하고 싶은 것을의 (비 작업) 예입니다 거기에는 이것이 작동하지 않는 특별한 이유가 있으며 그것을 성취하기위한 적절한 방법이 있습니까?

+0

환경 변수가'$ TABLES' (복수형)인데도 템플릿에'$ TABLE'이 (가) 있기 때문에 아마도? – bishop

+0

@bishop, 아니요. 죄송합니다. 장난감 예제의 오타였습니다. – mlegge

답변

3

대체 효과가 예상대로 작동합니다.

$ cat template.hql 
SELECT COUNT(*) FROM ${TABLE}; 
$ export TABLE=DEFAULT.FOOTABLE 
$ envsubst < template.hql 
SELECT COUNT(*) FROM DEFAULT.FOOTABLE; 

은 그래서에서 표준에서 쿼리를 읽지 않습니다 hive 의심 나는 an online manual에서 볼 수동으로 파일을 만들 수 있도록에서, -f 매개 변수를 지원 :

TMPFILE=$(mktemp) 
envsubst <template.hql> $TMPFILE 
hive -f $TMPFILE 
rm $TMPFILE 

당신이 떠들썩한 파티의 약간 새로운 버전의 경우, 당신은 중간 파일을 방지 할 수 있습니다

hive -f <(envsubst < template.hql) 

잘 모르겠지만 hive -f -이 표준 입력에서 읽을 수 있는지 확인하십시오.