[Hive] Shell Script에서 외부에서 하이브 테이블 가져오기

2021. 5. 6. 02:27 Big Data/Apache Hive

 

Shell Script에서 외부 하이브 테이블 가져오는 방법

외부에서 하이브 테이블 가져오기

  1. (외부) 하이브 테이블 데이터 복사
  2. (내부) 하이브 테이블 생성
  3. (내부) 데이터 하이브 테이블로 로드(Load)

쉘(shell)에서 데이터를 덤프, 테이블 생성, 로드 까지 하는 방법

 

스크립트

  • 스크립트에서 첫번째로 hadoop distcp를 이용해서 데이터를 덤프해 오자.
  • cat을 이용해서 하이브 쿼리를 특정 디렉토리의 .hql을 생성
  • .hql의 파일을 hive -f를 통해서 실행

위 과정에서 Hive 쿼리를 직접 입력하지 않고, hql을 생성한 이유는 이후에 스크립트에서가 아닌 스크립트 내에 있는 여러 쿼리들 중에서 하나만 실행하고 싶을때 사용하면 좋다. 또한 cat을 이용하는 이유는 하이브 쿼리를 순수하게 그대로 사용이 가능하기 때문이다. 예를 들어 cat을 사용하지 않고 """로 여러 행을 입력하게 하기 위해서는 \를 개행하는 곳마다 입력을 해야 한다. 그렇게 되면 이후에 쿼리 날릴때 \를 또 수정해야 하는 문제가 있기 때문에 쉘에서 hive 쿼리를 실행할때는 cat을 이용해서 hql 파일을 생성하고 hql파일을 실행하는게 좋은것 같다.

 

# 1
SRC_HDFS_PATH=<source_hdfs_path>
DST_HDFS_PATH=<dst_hdfs_path>

hadoop distcp ${<SRC_HDFS_PATH} ${DST_HDFS_PATH}

# 2 & 3
USER_HQL=./auto-gen/user_id.hql
cat << EOF > $USER_HQL
DROP TABLE user.id;
CREATE TABLE user.id
(
id                    string,
name                  string,
age                   int
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE;
LOAD DATA INPATH '${DST_HDFS_PATH}' into table user.id;
EOF
hive -f ${USER_HQL}

 

출처 : ourcstory.tistory.com/528?category=717035