>source

I 관측을 필터링하기 위해 문자열 변수를 하이브로 구문 분석하는 데 사용하는 쉘 스크립트가 있습니다. 아래의 스크립트와 하이브 code를 모두 제공합니다.

다음 스크립트에서는 문자열 값이있는 변수가 있고 다음과 같은 예제를 HIVE로 구문 분석하려고합니다.

쉘 스크립트 :

name1='"Maria Nash"' *(I use a single quote first and then a double)*
hive --hiveconf name=${name1} -f t2.hql

하이브 code (t2.hql)

create table db.mytable as
SELECT *
FROM db.employees
WHERE emp_name='${hivevar:name}';

결론

정확하므로 최종 테이블이 생성되지만 관찰이 포함되어 있지 않습니다. 직원 테이블에는 EMP_NAME "MARIA NASH"가있는 관찰이 포함되어 있습니다.

나는 쉘에서 문자열을 올바르게 구문 분석하지 않을 것이라고 생각하거나 하이브 쿼리에서 파싱 된 변수를 처리하는 방법에 대한 올바른 구문을 따르지 않는다고 생각합니다.

나는 당신의 도움을 주셔서 감사합니다!

왜 단일 + 큰 따옴표를 사용하고 있습니까? 큰 따옴표가 충분합니다. 그들은 하이브로 전달 될 때 제거 될 것이고, 하이브 하이브에서는 작은 따옴표를 추가하면 정확합니다. 또는 EMP_NAME에는 큰 따옴표가 포함되어 있습니까?

leftjoin2021-09-05 07:39:55

@leftjoin 다시 확인하십시오. 나는 그것을 바꿨다. 나는 "마리아"를 "마리아 내쉬"와 같은 문자열로 대체했습니다. 그것은 다를 수 있습니다.

Vamkos2021-09-05 07:39:55

따옴표는 쉘에 의해 처리되지만 인용 된 표현식 안에 따옴표를 사용하는 경우 문자열 값의 일부이면 name1= 'maria nash'와 hive --hiveconf name= "$ {name1}"-f t2를 사용하면됩니다. HQL, 큰 따옴표는 매개 변수 확장 주위에 중요합니다. 문제는 이름= $ {name1} 인용문을 사용하고 있습니다.

Nahuel Fouilleul2021-09-05 07:39:55

@nahuelfouilleul 그것은 정답입니다. 감사합니다!

Vamkos2021-09-05 07:39:55

하이브 스크립트의 첫 번째 줄로 이것을 추가하십시오 :`! echo emp_name= '$ {hivevar : name}'`-space +! 하이브에서 실행되는 쉘 명령입니다. 이렇게하면 매개 변수가 인쇄됩니다

leftjoin2021-09-05 07:39:55
  • 이전 python : PYGAME을 사용하여 PS4 컨트롤러에서 어떤 버튼을 누르고 있는지 확인하는 방법
  • 다음 linux : 여러 줄의 출력을 한 줄로 연결하는 방법은 무엇입니까?