- 인쇄
- PDF
Hive External Table로 CSV 파일 연동
- 인쇄
- PDF
Classic 환경에서 이용 가능합니다.
Hive External Table은 Hive에서 테이블 생성 시 External 키워드로 생성하는 테이블입니다. Hive External Table은 hive.metastore.warehouse.dir
속성이 가리키는 디렉터리에 데이터를 저장하지 않으며, 테이블 생성 시 설정한 경로에 데이터를 저장합니다.
이미 Hadoop에 있는 데이터를 기반으로 테이블을 만들기 때문에 스키마만 정해주면 생성할 수 있습니다.
Hive 사용에서도 Hive External Table에 관련된 예제를 볼 수 있습니다.
이 가이드에서는 Object Storage에 보관한 csv 데이터를 Cloud Hadoop에서 제공하는 Hive의 External Table로 연동하여 사용하는 방법을 설명합니다.
샘플 데이터 준비
Hive External 테이블을 테스트하기 위한 샘플 데이터로 기상자료개방포털에서 제공하는 기온 데이터를 다운로드해 주십시오.
샘플 데이터를 준비하는 방법은 다음과 같습니다.
기상자료개방포털에 접속한 후 메인 페이지에서 기후통계분석 > 통계분석 > 조건별통계를 차례대로 클릭해 주십시오.
검색 조건을 다음과 같이 설정한 후 [검색] 버튼을 클릭해 주십시오.
- 분류 : 지상
- 지역/지점 : 서울 또는 부산
- 요소 : 기온
- 기간 : 일 선택 후,
2011년 ~ 2021년
으로 설정 - 조건 : 월과 일의 체크박스 체크
결과 그래프 우측 하단의 [csv] 버튼을 클릭해 csv 파일을 다운로드해 주십시오.
위 2~3단계를 반복하여
서울
과부산
지역의 각 기온 데이터를 다운로드해 주십시오.다운받은 csv 파일 내용을 확인해 주십시오. 맨 위에서 부터 헤더 내용이 12줄, 기온 데이터는 13번째 줄부터 시작함을 알 수 있습니다.
한글 문자 깨짐 현상은 인코딩을 변경하면 해결할 수 있습니다. 자세한 내용은 Hive External Table 생성의 한글 깨짐 현상에 대한 참고 사항을 확인해 주십시오.
- 다음 명령어를 사용하여 다운받은 csv 파일에서 불필요한 헤더 부분을 제거하고 파일 이름을 변경해 주십시오.
$ sed 1,12d extremum_20211021101126.csv > data1.csv $ sed 1,12d extremum_20211020212220.csv > data2.csv
Obeject Storage에 데이터 업로드
Obeject Storage에 데이터를 업로드하는 방법은 다음과 같습니다.
- Object Storage에
live-test-bucket
버킷을 생성해 주십시오. - 생성한 버킷에
hivedata
디렉터리를 생성한 후 그 안에 샘플 데이터(csv) 파일을 업로드해 주십시오.
버킷 생성에 대한 자세한 내용은 Obeject Storage 사용 가이드를 참고해 주십시오.
Hive External Table 생성
Hive External Table을 생성하는 방법은 다음과 같습니다.
Cloud Hadoop 클러스터의 엣지 노드에 SSH로 접속해 주십시오.
- 클러스터 노드에 SSH접속하기에 대한 자세한 내용은 SSH로 클러스터 노드 접속를 참고해 주십시오.
Hive 클라이언트 명령어를 이용하여 External Table을 생성합니다.
weather
테이블이 생성되었으며,SELECT
쿼리를 수행하여 데이터를 확인할 수 있습니다.
CREATE EXTERNAL TABLE weather ( no STRING, area STRING, day STRING, avg FLOAT, max FLOAT, maxTime STRING, min FLOAT, minTime STRING, diff FLOAT ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE LOCATION 's3a://live-test-bucket/hivedata'; SELECT count(*) FROM weather; +-------+ | _c0 | +-------+ | 7913 | +-------+ SELECT * FROM weather WHERE day = '2011-01-01'; +-------------+---------------+--------------+--------------+--------------+------------------+--------------+------------------+---------------+ | weather.no | weather.area | weather.day | weather.avg | weather.max | weather.maxtime | weather.min | weather.mintime | weather.diff | +-------------+---------------+--------------+--------------+--------------+------------------+--------------+------------------+---------------+ | 159 | 부산 | 2011-01-01 | -1.1 | 4.1 | 14:55 | -5.8 | 06:40 | 9.9 | | 108 | 서울 | 2011-01-01 | -6.8 | -2.9 | 14:57 | -10.4 | 01:54 | 7.5 | +-------------+---------------+--------------+--------------+--------------+------------------+--------------+------------------+---------------+
한글 문자 깨짐 현상
한글 문자가 깨지는 현상은 기상청에서 제공되는 데이터가 utf-8
이 아닌 euc-kr
로 제공되어 발생한 현상입니다. 아래와 같이 Hive External Table의 인코딩을 euc-kr
로 변경하면 한글이 바르게 표시됩니다.
ALTER TABLE weather SET TBLPROPERTIES('serialization.encoding'='euc-kr');
SELECT * FROM weather WHERE day = '2011-01-01';
+-------------+---------------+--------------+--------------+--------------+------------------+--------------+------------------+---------------+
| weather.no | weather.area | weather.day | weather.avg | weather.max | weather.maxtime | weather.min | weather.mintime | weather.diff |
+-------------+---------------+--------------+--------------+--------------+------------------+--------------+------------------+---------------+
| 159 | 부산 | 2011-01-01 | -1.1 | 4.1 | 14:55 | -5.8 | 06:40 | 9.9 |
| 108 | 서울 | 2011-01-01 | -6.8 | -2.9 | 14:57 | -10.4 | 01:54 | 7.5 |
+-------------+---------------+--------------+--------------+--------------+------------------+--------------+------------------+---------------+
Hive External Table 삭제
Hive External Table을 삭제하는 방법은 다음과 같습니다.
- 생성된 Hive External Table 다음 명령어를 사용하여 삭제해 주십시오.
- 아래는 앞서 생성한 hive External 테이블(
weather
)을 삭제하는 예시입니다.
- 아래는 앞서 생성한 hive External 테이블(
DROP TABLE weather;
- 삭제된 테이블에 SELECT 쿼리를 수행해 주십시오. 에러가 발생하여 정상적으로 테이블이 삭제된 것을 확인할 수 있습니다.
SELECT * FROM weahter;
Error: Error while compiling statement: FAILED: SemanticException [Error 10001]: Line 1:14 Table not found 'weahter' (state=42S02,code=10001)
Hive External Table이 삭제되더라도 Object Storage의 csv 파일은 삭제되지 않고 안전하게 보관됩니다.