하이브 테이블 8

Hive는 무조건 MapReduce를 사용할까?

Hive는 무조건 MapReduce를 사용할까 · Version : Hive Hive에서 쿼리를 실행할때, 무조건 맵리듀스(MapReduce)를 사용할까? 하이브에서 대부분의 쿼리를 실행할 경우 맵리듀스가 사용된다. 하지만 일부 쿼리의 경우 로컬 모드 환경에서 맵리듀스를 사용하지 않고도 쿼리가 동작 할수도 있다. 예를 들어 아래 스크립트 처럼 단순히 테이블을 조회하는 쿼리는 맵리듀스를 사용하지 않는다. select * from tbl_a; 단순히 SELECT와 같은 쿼리는 하이브가 테이블로 부터 레코드를 읽고 형식에 맞춰서 콘솔로 출력한다. 이 경우 맵리듀스 작업대신 파일에서 Fetch Task로 전체 데이터를 가져온다. 마치 아래 하둡 명령과 유사하다. hadoop fs -cat $ file_name ..

Hive에서 SELECT 결과를 테이블로 INSERT 하기

Hive에서 SELECT 결과를 테이블로 INSERT 하기 · Version : Hive Hive에서 쿼리 결과를 테이블에 입력할때, 이미 존재하는 테이블에 데이터를 입력할수도 있으며, 새로운 테이블을 생성하며 데이터를 입력할 수도 있다. 이미 존재하는 테이블에 SELECT된 결과를 저장할 때는 INSERT 구문을 사용한다. OVERWRITE 예약어를 사용하여 해당 파티션의 데이터를 교체할 수 있다. OVERWRITE 예약어를 INTO로 변경하면 하이브는 데이터를 교체하지 않고 원래 데이터에 추가한다. INSERT OVERWRITE TABLE tbl_new PARTITION (month = '1', day = '1') select * from tbl_origin as origin where origin...

Hive 테이블 삭제, 수정

Hive 테이블 삭제, 수정 · Version : Hive 하이브에서 테이블을 삭제하는 명령은 DROP TABLE 명령어를 사용한다. DROP TABLE IF EXISTS table_name; 테이블을 삭제할때, 하둡의 휴지통기능이 활성화되어 있으면 데이터는 분산 파일 시스템의 .Trash 디렉터리로 이동된다. 휴지통 기능에 설정된 시간이후 데이터가 완전히 삭제 된다. 휴지통 기능이 비활성화 되어 있는 경우 즉시 삭제된다. 또한 삭제하려는 테이블이 외부 테이블인경우, 테이블의 메타데이터만 삭제되며 데이터는 그대로 남아있다. 테이블 수정은 ALTER TABLE 명령을 사용하여 변경한다. 테이블 수정은 메타데이터만 변경할 뿐 데이터 자체는 변경시키지 않는다. [테이블명 변경] Table_name 테이블명을 ..

Hive 파티션 테이블에서 where 없는 쿼리 실행 방지

Hive 파티션 테이블에서 where 없는 쿼리 실행 방지 · Version : Hive 하이브에서 테이블 파티셔닝을 하는 가장 큰 이유는 빠르게 데이터를 검색하기 위해서이다. 아주 큰 데이터가 있더라도 파티션 스키마가 검색하려는 범위 필터링을 반영한다면 파티셔닝 테이블은 쿼리의 성능을 극적으로 올려준다. 그래서 특정값을 필터하는 WHERE 절에 파티션 조건을 포함하는데 이러한 조건을 “파티션 필터”라고 부른다. 그러나 파티셔닝이 잘 되어 있다고 하더라도, 테이블 데이터가 많거나 파티션 개수가 많다면 거대한 맵리듀스 작업을 유발할 수 있다. 이러한 맵리듀스의 부하를 방지하기 위해 WHERE 절에 파티션 필터가 없는경우 쿼리 실행이 되지 않도록 옵션을 설정할 수 있다. 아래 스크립트는 WHERE절에 파티션..

Hive 매니지드 테이블 및 외부 테이블

Hive 매니지드 테이블 및 외부 테이블 · Version : Hive 하이브에는 매니지드 테이블과 외부 테이블이라고 불리는 테이블 저장 방식이 있다. 이 둘의 차이점은 데이터 소유자가 하이브이냐, 아니냐로 크게 구분할 수 있다. 매지니드 테이블 (Managed Table)은 내부 테이블이라고도 불리며 하이브 속성(hive.metastore.warehouse.dir)에서 정의한 디렉터리의 하위 디렉터리를 만들어서 데이터를 저장한다. 하이브에서 매니지드 테이블을 삭제할때 테이블내의 데이터가 삭제된다. 외부 테이블은 테이블을 생성할때, EXTERNAL 키워드를 사용하며, LOCATION절에서 지정한 위치에 데이터가 존재한다는것을 하이브에게 알려준다. 하이브에서 외부 테이블을 삭제하면, 하이브 내에서 스키마만..

Hive 테이블

Hive 테이블 · Version : Hive 하이브에서 테이블을 생성 할때에는 SQL 규칙을 따르지만 테이블의 데이터 파일 생성 위치나 사용할 포맷등 확장기능을 사용하여 유연성을 제공한다. CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name -- (Note: TEMPORARY available in Hive 0.14.0 and later) [(col_name data_type [column_constraint_specification] [COMMENT col_comment], ... [constraint_specification])] [COMMENT table_comment] [PARTITIONED BY (col_name d..

Hive Meta Database

Hive Meta Database · Version : Hadoop 3.0.0-cdh6.3.2, Hive 하이브(Hive)의 메타정보는 파일의 물리적인 위치 및 데이터에 대한 디렉터리 정보를 저장를 데이터베이스에 저장하며 기본적으로 사용되는 데이터베이스로는 더비(Derby), MySQL, Oracle, PostgreSQL이 있다. 하이브 클라이언트를 이용해서 확인하는 정보는 메타 데이터베이스 정보에 기반하고 있으며, 각 테이블 관련 정보는 메타 데이터베이스에서 직접 쿼리하여 확인이 가능하다. · Hive Architecture : http://sqlmvp.kr/221718439399 hive메타 데이터베이스가 설치된 DB에 접속하여 테이블 목록을 살펴보면 매우 많은 테이블이 있는 것을 확인할 수 있다. ..

Hive 테이블 생성

Hive 테이블 생성 · Version : Hive Apache Hive에서 테이블은 HDFS에 저장된 파일과 디렉터리 구조에 대한 메터 정보를 저장한다. Hive는 HiveQL이라는 SQL과 유사한 언어를 제공하며 아래와 같은 특징이 있다. · Hive에서 사용하는 테이블은 HDFS에 저장되며, HDFS는 한번 저장한 파일은 수정할 수 없기 때문에 UPDATE와 DELETE는 사용할 수 없다. · 데이터를 INSERT할때 빈 테이블에 입력하거나 입력된 데이터를 덮어쓰는 경우(INSERT OVERWRITE 구문 사용)에만 가능하다. · HiveQL은 FROM 절에만 서브쿼리를 사용할 수 있다. · HiveQL 뷰는 읽기 전용이다. · SELECT 문을 사용할때 HAVING절을 사용할 수 없다. · Sto..