Hive External Table로 json 파일 연동

Prev Next

Classic 환경에서 이용 가능합니다.

Hive External Table은 Hive에서 테이블 생성 시 External 키워드로 생성하는 테이블입니다. Hive External Table은 hive.metastore.warehouse.dir 속성이 가리키는 디렉터리에 데이터를 저장하지 않으며, 테이블 생성 시 설정한 경로에 데이터를 저장합니다.

이미 Hadoop에 있는 데이터를 기반으로 테이블을 만들기 때문에 스키마만 정해주면 생성할 수 있습니다.

참고

Hive 사용 가이드에서도 Hive External Table에 관련된 예제를 볼 수 있습니다.

이 가이드에서는 json 데이터를 Cloud Hadoop에서 제공하는 Hive의 External Table로 연동하여 사용하는 방법을 설명합니다.

샘플 데이터를 준비하는 방법은 다음과 같습니다.

  1. hive 사용자로 전환시켜 주십시오.
$ sudo su - hive
Plain text
  1. 해당 데이터를 다운로드해 주십시오.
참고

해당 데이터는 ndjson(Newline Delimited JSON) Data형태입니다.

HDFS json 파일 업로드하는 방법은 다음과 같습니다.

  1. HDFS에 디렉터리를 생성하십시오
$ hdfs dfs -mkdir /user/hive/bookstat
Plain text
  1. HDFS 에 json 파일을 업로드하십시오.
$ hdfs dfs -put bookstat.json /user/hive/bookstat
Plain text
  1. HDFS 파일 리스트를 확인하십시오.
$ hdfs dfs -ls -R /user/hive/bookstat
-rw-r--r--   2 hive hdfs        193 2023-06-28 14:41 /user/hive/bookstat/bookstat.json
Plain text

Hive External Table을 생성하는 방법은 다음과 같습니다.

  1. Cloud Hadoop 클러스터의 엣지 노드에 SSH로 접속해 주십시오.

  2. Hive 클라이언트 명령어를 이용하여 External Table을 생성합니다.

    • 데이타베이스 생성
    hive> create database book;
    
    Plain text
    • 생성한 데이타베이스 사용
    hive> use book;
    
    Plain text
    • 테이블 생성
    hive> CREATE EXTERNAL TABLE IF NOT EXISTS bookstat_serde1
    (
        statTime STRING,
        bizCode STRING,
        saleInfo STRUCT <
            bookName:STRING,
            saleCount:INT
        >
    )
    ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
    STORED AS TEXTFILE
    LOCATION '/user/hive/bookstat' ;
    
    Plain text
  • 테이블이 생성되면 SELECT 쿼리를 수행하여 데이터를 확인할 수 있습니다.
  • 테이블 조회
hive> select * from bookstat_serde1;
OK
20130710180059  BOOK    {"bookname":"book61","salecount":749}
20230628140059  BOOK    {"bookname":"book800","salecount":899}

Plain text

Hive External Table을 삭제하는 방법은 다음과 같습니다.

  1. 생성된 Hive External Table 다음 명령어를 사용하여 삭제해 주십시오.
    • 아래는 앞서 생성한 Hive External Table(bookstat_serde1)을 삭제하는 예시입니다.
DROP TABLE bookstat_serde1;
Plain text
  1. 삭제된 테이블에 SELECT 쿼리를 수행해 주십시오. 에러가 발생하여 정상적으로 테이블이 삭제된 것을 확인할 수 있습니다. 또한 Show Tables를 통해 테이블 삭제 여부를 확인하실 수 있습니다.
  • SELECT 쿼리 이용
SELECT * FROM bookstat_serde1;

Error: Error while compiling statement: FAILED: SemanticException [Error 10001]: Line 1:14 Table not found 'bookstat_serde1' (state=42S02,code=10001)
Plain text
  • SHOW TABLES로 테이블 목록 확인
SHOW TABLES;
Plain text