Apache Hive 데이터 웨어하우스 소프트웨어는 구축된 스토리지에 저장되어있는 대용량의 데이터셋을 SQL을 사용하여 읽고, 쓰고, 관리하는 것을 가능하게한다. 이미 저장되어 있는 데이터에 구조를 투영시킬 수 있다. Hive와 사용자를 연결하기 위한 커맨드 라인 툴과 JDBC 드라이버를 제공한다.
hadoop의 SQL
❗️ NOTE
HDFS, Hadoop Distributed File System
범용 하드웨어에서 동작하고 장애 복구성을 가지는 분산 파일 시스템
실시간 처리보다는 배치처리를 위해 설계되었으므로 빠른 데이터 응답시간이 필요한 작업에는 적합하지 않다.
hive.metastore.warehouse.dir = hdfs:///user/hive/
hdfs:///user/hive/{데이터베이스 명}.db
hdfs:///user/hive/{데이터베이스 명}.db/{테이블 명}
{데이터 타입번호:데이터}
와 같은 형태로 보여진다.📌 uniontype
CREATE TABLE union_test(
foo UNIONTYPE<int, double, array<string>, struct<a:int,b:string>>
);
-- 0: int
-- 1: double
-- 2: array<string>
-- 3: struct<a:int, b:string>
SELECT foo FROM union_test;
{0:1}
{1:2.0}
{2:["three","four"]}
{3:{"a":5,"b":"five"}}
{2:["six","seven"]}
{3:{"a":8,"b":"eight"}}
{0:9}
{1:10.0}
테이블 to 디렉토리
테이블 데이터를 조회하여 디렉토리에 파일로 생성하는 방법.
👉 INSERT DIRECTORY : 테이블의 데이터를 읽어서 지정한 위치에 파일을 출력한다.
INSERT OVERWRITE [LOCAL] DIRECTORY directory1
[ROW FORMAT row_format] [STORED AS file_format] (Note: Only available starting with Hive 0.11.0)
SELECT ... FROM ...
### EXAMPLE
# /user/ 디렉토리에 source 테이블을 읽어서 저장
INSERT OVERWRITE DIRECTORY 'hdfs://1.0.0.1:8020/user/'
SELECT *
FROM source
;
# /user/ 디렉토리에 source 테이블을 읽어서 칼럼 구분을 탭으로 저장
INSERT OVERWRITE DIRECTORY 'hdfs://1.0.0.1:8020/user/'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
SELECT *
FROM source
;
# /user/ 디렉토리에 source 테이블을 읽어서 칼럼 구분을 콤마으로 저장하면서 Gzip으로 압축
# 파일을 CSV 형태로 압축하여 저장
set hive.exec.compress.output=true;
set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;
INSERT OVERWRITE DIRECTORY 'hdfs://1.0.0.1:8020/user/'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
SELECT *
FROM source
;