HPL/SQL 시작하기

HPL/SQL 시작하기

HPL/SQL을 바로 사용해 보기 위한 빠른 안내예요. JDBC 연결 문자열에 mode=hplsql만 붙이면 Beeline 같은 클라이언트에서 HPL/SQL 문법을 곧바로 쓸 수 있습니다.

출처: 문서

본문

HPL/SQL 사용을 시작하기 위한 빠른 가이드입니다.

HiveServer에 JDBC 연결을 만들 수 있는 호스트나 서드파티 도구라면 어디서든 HPL/SQL을 활성화해서 사용할 수 있습니다. Beeline은 HPL/SQL용 인기 클라이언트인데, 다른 서드파티 도구는 구문 오류에 대한 일부 오류 메시지를 보여 주지 않기 때문입니다.

Beeline 연결 문자열에서 HPL/SQL 활성화하기

HiveServer에 연결할 클라이언트를 설정한 뒤, 클라이언트를 HiveServer에 연결하는 JDBC URL에 mode=hplsql 을 추가하면 됩니다.

beeline -u "jdbc:hive2://<HiveServer host>:10000/default;mode=hplsql"

이 모드로 클라이언트가 HiveServer에 연결하면 HPL/SQL이 활성화되고, 그렇지 않으면 비활성화됩니다.

Hive 프롬프트에서 HPL/SQL을 실행할 수 있습니다. 슬래시(/)를 사용하면 Beeline을 다중 라인 모드로 전환해서 여러 줄을 입력한 뒤 한 번에 평가할 수 있습니다.

0: jdbc:hive2://localhost> CREATE PROCEDURE greet(name STRING)
. . . . . . . . . . . . . . . . . . . . . . .> BEGIN
. . . . . . . . . . . . . . . . . . . . . . .>   PRINT 'Welcome to ' || name;
. . . . . . . . . . . . . . . . . . . . . . .> END;
. . . . . . . . . . . . . . . . . . . . . . .> /
No rows affected (0.084 seconds)
0: jdbc:hive2://localhost> greet('Apache Hive HPLSQL');/
INFO  : Welcome to Apache Hive HPLSQL
No rows affected (0.01 seconds)
0: jdbc:hive2://localhost>

기존의 Beeline 옵션인 -e, -f 도 사용할 수 있습니다. 아래는 hplsql 모드에서 사용할 수 있는 옵션 목록입니다.

파라미터:

파라미터 설명
-e ‘query’ 실행할 SQL 문장
-f file file 에서 SQL 문장 실행
-main procname 엔트리 포인트 (프로시저 또는 함수 이름)
-d var=value 변수 정의
–define var=value 변수 정의
-hiveconf var=value 변수 정의
-hivevar var=value 변수 정의

참고 사항:

  • -e 와 -f 는 함께 지정할 수 없습니다
  • -main 옵션을 지정하지 않으면 HPL/SQL은 스크립트의 처음부터 모든 문장을 실행합니다
  • 현재 -d, –define, -hivevar, -hiveconf 는 동일하게 입력 변수를 정의하는 데 사용됩니다

예제 1:

스크립트에서 HPL/SQL 문장을 실행:

beeline -u "jdbc:hive2://<HiveServer host>:10000/default;mode=hplsql" -f script.hplsql 

예제 2:

명령줄에서 HPL/SQL 문장을 실행:

beeline -u "jdbc:hive2://<HiveServer host>:10000/default;mode=hplsql" -e "NVL(MAX_PARTITION_DATE(db.sales, local_dt, code='A'), CURRENT_DATE)" 

예제 3:

변수 사용:

beeline -u "jdbc:hive2://<HiveServer host>:10000/default;mode=hplsql" -e "PRINT a || ', ' || b" -d a=Hello -d b=world 

결과:

Hello, world

더 알아보기 (Learn more)