하이브 24

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..

HiveQL과 Hive 데이터베이스

HiveQL과 Hive 데이터베이스 · Version : Hive HiveQL은 Hive에서 사용하는 쿼리 언어이다. SQL과 유사하지만 SQL과 다르며 표준 ANSI SQL을 지원하지 않는다. 하이브는 로우(ROW) 레벨의 삽입과 변경, 삭제를 지원하지 않으며, 트랜잭션 또한 지원하지 않는다. 하지만 하둡이 지원하는 범위 안에서 성능 확장을 위해 다양한 기능을 제공하며, 사용자가 정의한 확장과 외부 프로그램을 하이브와 연동할 수도 있다. 하이브에서 데이터베이스 개념은 단지 테이블의 카탈로그 또는 네임스페이스이다. 데이터베이스는 논리적인 그룹을 구성할 수 있으며 대규모 작업시 동일한 테이블명의 충돌을 방지할수도 있다. 데이터베이스를 별도로 지정하지 않으면 기본 데이터베이스(default)를 사용한다. 아..

Hive 텍스트파일 인코딩

Hive 텍스트파일 인코딩 · Version : Hive 텍스트 데이터의 필드를 구분할때, 탭(TAB) 또는 콤마(,)를 많이 사용한다. 이러한 일반적인 구분 기호는 데이터안에 콤마나 탭이 포함되어 있을 경우 전체 데이터 필드가 맞지 않는문제가 발생할 수 있어 주의해야 한다. 하이브도 탭 또는 콤마 같은 필드 구분자를 지원하지만 앞에서 말한 이유 때문에 일반적으로 잘 사용하지 않는 여러 제어 문자를 기본 구분 기호로 사용한다. 아래표는 하이브에서 제공하는 구분기호이다. 만약 필드에서 탭으로 분리하려면 ‘\t’를 사용하고, 콤마의 경우 ‘,’를 사용한다. 구분기호 설명 \n 레코드 줄 바꿈 ^A 모든 컬럼을 분리한다. CREATE TABLE 문에서 명시적으로 지정할때는 8진수 코드 ‘\001’을 사용한다...

Hive 데이터 타입

Hive 데이터 타입 · Version : Hive Hive는 여러 크기의 정수형과 부동소수점, 불린형과 임의의 길이를 가지는 문자열, TIMESTAMP, BINARY 타입등을 제공한다. 각각의 데이터형은 자바로 구현되어 있어 자바 데이터 타입과 동일하게 하이브에서 사용된다. 타입 크기 리터럴 문법 예제 TINYINT 1바이트 정수형 20 SMALLINT 2바이트 정수형 20 INT 4바이트 정수형 20 BGINT 8바이트 정수형 20 BOOLEAN TRUE 또는 FALSE TRUE FLOAT 단정도 부동 소수점 3.14159 DOUBLE 배정도 부동 소수점 3.14159 STRING 문자의 시퀀스, 또는 문자열 설정가능. 작은 따옴표 및 큰따옴표 사용가능 ‘Hello Hive’, “Hello Hive”..

Hive에서 하둡(dfs)명령 실행

Hive에서 하둡(dfs)명령 실행 · Version : Hive 하이브(Hive)에서 하둡(dfs) 명령을 수행할 수 있다. 하이브에서 하둡 명령어를 사용하는 방법은 dfs 를 사용하고 마지막에 세미콜론(;)을 입력한다. dfs -ls /; 하이브에서 dfs 명령을 사용하는것이 배시쉘에서 hadoop dfs 로 동일한 명령을 사용하는것보다 효율적이다. 하이브는 현재 프로세스에서 명령을 수행하는 반면, 배시쉘을 사용할때에는 새로운 jvm 인스턴스를 구동하여 명령을 실행하기 때문이다. 아래와 같이 -help 를 사용하면 dfs에서 제공하는 도움말을 볼 수 있다. 2020-05-18 / Sungwook Kang / http://sungwookkang.com Hadoop, Big Data, 하둡, 빅데이터, ..

Hive에서 쉘 명령 실행

Hive에서 쉘 명령 실행 · Version : Hive 하이브(Hive)에서 간단한 배시 쉘(bash shell) 명령을 수행할 수 있다. 더이상 쉘을 수행하기 위해서 하이브 CLI를 빠져나갈 필요가 없다. 하이브에서 쉘을 실행하는 방법은 ! 뒤에 쉘 명령어를 입력하고, 명령어 마지막에 세미콜론(;)을 입력한다. 아래 예시는 간단히 에코로 문자를 반환하는 것과, 현재 경로를 표시한다. ! /bin/echo “Hello”; ! pwd; 쉘 명령을 실행할때, 사용자 입력이 필요한 명령은 실행해서는 안된다. 쉘 파이프와 파일 글로빙(globbing)은 동작하지 않는다. 예를들어 ! ls *.hql 명령은 *.hql 이름을 가지는 하나의 파일만 찾아줄뿐, .hql 확장자를 가진 모든 파일을 찾아서 보여주지는 ..

Hive에서 콤마(,)로 컬럼 구분 및 쿼테이션 내부의 콤마(“, , ”) 파싱 스킵하기

Hive에서 콤마(,)로 컬럼 구분 및 쿼테이션 내부의 콤마(“, , ”) 파싱 스킵하기 · Version : Hadoop 3.0.0-cdh6.3.2 Hive 테이블에서 데이터를 로드할때, 특정 구분자를 이용해서 파싱하는 경우 파싱의 규칙을 미리 테이블을 생성할때 정의해야 한다. 아래 스크립트는 콤마(,)로 컬럼을 구분하는 데이터에서 파싱을 하지 않아야 하는 콤마(,)의 데이터는 더블 쿼테이션(“”)으로 감싸서 해당 문장이 파싱되지 않도록 하는 규칙이다. 예를 들어 아래와 같은 콤마로 구분된 텍스트 데이터가 있다고 할 때, 컬럼 Col_1, Col_2, Col_3로 파싱한다. col_1,col_2,"col_3(a=3&b=40&c=NOTES&cid=1,10,33)" create table tbl_a ( c..