Hive 무조건 MapReduce 사용할까

 

·       Version : Hive

 

Hive에서 쿼리를 실행할때, 무조건 맵리듀스(MapReduce) 사용할까?  하이브에서 대부분의 쿼리를 실행할 경우 맵리듀스가 사용된다. 하지만 일부 쿼리의 경우 로컬 모드 환경에서 맵리듀스를 사용하지 않고도 쿼리가 동작 할수도 있다. 예를 들어 아래 스크립트 처럼 단순히 테이블을 조회하는 쿼리는 맵리듀스를 사용하지 않는다.

select * from tbl_a;

 

단순히 SELECT 같은 쿼리는 하이브가 테이블로 부터 레코드를 읽고 형식에 맞춰서 콘솔로 출력한다. 경우 맵리듀스 작업대신 파일에서 Fetch Task 전체 데이터를 가져온다. 마치 아래 하둡 명령과 유사하다.

hadoop fs -cat $ file_name

 

일반적으로 min / max / count 같은 모든 종류의 집계에는 맵리듀스 작업이 필요하다.  또한 컬럼을 사용하게 되면 하이브는 파일에서 구문을 분석하여 행에서 컬럼을 추출해야 하므로 맵리듀스 작업이 필요하다.

 

hive.exec.mode.local.auto 속성을 true 설정하면 다른 연산도 로컬 모드로 실행을 시도한다.

hive.exec.mode.local.auto = true;

 

 

 

 

2020-07-14 / Sungwook Kang / http://sungwookkang.com

 

 

Hadoop, Big Data, 하둡, 빅데이터, 데이터분석, HDFS, 하둡 파일 시스템, Hive, 하이브, 하이브 테이블, Hive table, 하이브쿼리, Hive SQL, 맵리듀스, MapReduce

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.month = '1' and origin.day = '1';

 

만약 여러 파티션 데이터를 만들때, 파티션별로 INSERT 구문을 만들면 반복해서 데이터를 읽어야 하는 비효율적인 부분이 발생한다. 하이브는 입력 데이터를 한번 읽어서 이를 다수의 테이블로 분산하는 문법을 제공한다.

from tbl_origin as origin

INSERT OVERWRITE TABLE tbl_new PARTITION (month = '1', day = '1')

       select * where origin.month = '1' and origin.day = '1'

INSERT OVERWRITE TABLE tbl_new PARTITION (month = '2', day = '1')

       select * where origin.month = '2' and origin.day = '1'

INSERT OVERWRITE TABLE tbl_new PARTITION (month = '3', day = '1')

       select * where origin.month = '3' and origin.day = '1';

 

 

SELECT 결과물을 새로운 테이블을 생성하면서 저장하는 방법은 CREATE 구문을 사용할 있다.

CREATE TABLE tbl_create

AS SELECT col1, col2, col3

from tbl_origin

where month = '1' and day = '1';

 

 

 

2020-07-13 / Sungwook Kang / http://sungwookkang.com

 

 

Hadoop, Big Data, 하둡, 빅데이터, 데이터분석, HDFS, 하둡 파일 시스템, Hive, 하이브, 하이브 테이블, Hive table, 하이브쿼리, Hive SQL, 데이터 저장, INSERT SELECT

Hive 테이블 삭제, 수정

 

·       Version : Hive

 

하이브에서 테이블을 삭제하는 명령은 DROP TABLE 명령어를 사용한다.

DROP TABLE IF EXISTS table_name;

 

테이블을 삭제할때, 하둡의 휴지통기능이 활성화되어 있으면 데이터는 분산 파일 시스템의 .Trash 디렉터리로 이동된다. 휴지통 기능에 설정된 시간이후 데이터가 완전히 삭제 된다. 휴지통 기능이 비활성화 되어 있는 경우 즉시 삭제된다. 또한 삭제하려는 테이블이 외부 테이블인경우, 테이블의 메타데이터만 삭제되며 데이터는 그대로 남아있다.

 

테이블 수정은 ALTER TABLE 명령을 사용하여 변경한다. 테이블 수정은 메타데이터만 변경할 데이터 자체는 변경시키지 않는다.

[테이블명 변경]

Table_name 테이블명을 table_name_new 테이블명으로 변경한다.

ALTER TABLE table_name TO table_name_new

 

[파티션 추가/변경/삭제]

파티션 추가는 ADD PARTITION 명령을 사용한다.

ALTER TABLE table_name ADD IF NOT EXISTS

PARTITION(year = 2020, month = 1, day = 1) LOCATION '/user/data/20200101'

PARTITION(year = 2020, month = 1, day = 2) LOCATION '/user/data/20200102'

PARTITION(year = 2020, month = 1, day = 3) LOCATION '/user/data/20200103';

 

파티션 위치 변경은 SET LOCATION 명령을 사용한다.

ALTER TABLE table_name PARTIOTN(year = 2020, month = 1, day = 1)

SET LOCATION '/user/data/…';

 

파티션 삭제는 DROP PARTITION 명령을 사용한다.

ALTER TABEL table_name DROP IF EXISTS PARTITION (year = 2020, month = 1, day = 1);

 

 

[컬럼 변경]

컬럼명, 컬럼 위치, 주석 데이터 타입을 변경할 있다. old_column 컬럼명을 new_column 이름으로 변경하고 데이터 타입은 INT, 컬럼의 위치는 col2 뒤에 위치한다.

ALTER TABLE table_name

CHANGE COLUMN old_column new_column INT

COMMENT 'Input comment'

AFTER col2;

 

컬럼 이름이나 데이터 타입을 변경하지 않더라도, 컬럼의 예전이름과 새이름, 데이터 타입을 지정해야 한다.컬럼을 이동하지 않는다면 AFTER 명령은 필요하지 않으며, 컬럼을 앞으로 위치할 경우 FIRST 사용할 있다.

 

[컬럼 추가 / 삭제   교체]

컬럼 추가는 이미 존재하는 컬럼의 마지막과 파티셔닝 컬럼 앞에 추가된다.

ALTER TABLE table_name ADD COLUMNS (

add_col1 STRING COMMENT 'Input Comments',

add_cpl2 LONG COMMENT 'Input Comments');

 

이미 존재하는 모든 컬럼을 삭제하고 새로운 컬럼으로 교체한다. 메타 데이터만 변경된다.

ALTER TABLE table_name REPLACE COLUMNS(

col1 INT COMMENT 'Input Comments',

col2 STRING COMMENT 'Input Comments',

col3 LONG COMMENT 'Input Comments');

 

 

 

 

2020-07-07 / Sungwook Kang / http://sungwookkang.com

 

 

Hadoop, Big Data, 하둡, 빅데이터, 데이터분석, HDFS, 하둡 파일 시스템, Hive, 하이브, 하이브 테이블, Hive table, 하이브쿼리, Hive SQL, 하이브파티션, 테이블삭제, 테이블수정

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

 

·       Version : Hive

 

하이브에서 테이블 파티셔닝을 하는 가장 이유는 빠르게 데이터를 검색하기 위해서이다. 아주 데이터가 있더라도 파티션 스키마가 검색하려는 범위 필터링을 반영한다면 파티셔닝 테이블은 쿼리의 성능을 극적으로 올려준다. 그래서 특정값을 필터하는 WHERE 절에 파티션 조건을 포함하는데 이러한 조건을 파티션 필터라고 부른다.

그러나 파티셔닝이 되어 있다고 하더라도, 테이블 데이터가 많거나 파티션 개수가 많다면 거대한 맵리듀스 작업을 유발할 있다. 이러한 맵리듀스의 부하를 방지하기 위해 WHERE 절에  파티션 필터가 없는경우 쿼리 실행이 되지 않도록 옵션을 설정할 있다.

 

아래 스크립트는 WHERE절에 파티션 필터가 없는경우 쿼리가 실행되지 않도록 적용한 예시이다.

hive> set hive.mapred.mode = strict;

hive> select * from campaign;

FAILED: SemanticException [Error 10056]: Queries against partitioned tables without a partition filter are disabled for safety reasons. If you know what you are doing, please set hive.strict.checks.no.partition.filter to false and make sure that hive.mapred.mode is not set to 'strict' to proceed. Note that you may get errors or incorrect results if you make a mistake while using some of the unsafe features. No partition predicate for Alias "campaign" Table "campaign"

hive>

 

 

 

아래 스크립트는 WHERE 절에 파티션 필터가 없을 경우에도 쿼리가 실행된다.

hive> set hive.mapred.mode = nonstrict;

hive> select * from campaign;

OK

Time taken: 0.671 seconds

hive>

 

현재 테이블에 생성되어 있는 파티션키 정보를 확인하려면 아래 명령을 실행한다.

hive> show partitions campaign;

OK

date_local=20200616

date_local=20200617

date_local=20200630

Time taken: 0.13 seconds, Fetched: 3 row(s)

hive>

 

 

 

 

2020-07-01 / Sungwook Kang / http://sungwookkang.com

 

 

Hadoop, Big Data, 하둡, 빅데이터, 데이터분석, HDFS, 하둡 파일 시스템, Hive, 하이브, 하이브 테이블, Hive table, 하이브쿼리, Hive SQL, 하이브파티션, 파티션필터, partition filter

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

 

·       Version : Hive

 

하이브에는 매니지드 테이블과 외부 테이블이라고 불리는 테이블 저장 방식이 있다. 둘의 차이점은 데이터 소유자가 하이브이냐, 아니냐로 크게 구분할 있다.

 

매지니드 테이블 (Managed Table) 내부 테이블이라고도 불리며 하이브 속성(hive.metastore.warehouse.dir)에서 정의한 디렉터리의 하위 디렉터리를 만들어서 데이터를 저장한다. 하이브에서 매니지드 테이블을 삭제할때 테이블내의 데이터가 삭제된다.

 

외부 테이블은 테이블을 생성할때, EXTERNAL 키워드를 사용하며, LOCATION절에서 지정한 위치에 데이터가 존재한다는것을 하이브에게 알려준다. 하이브에서 외부 테이블을 삭제하면, 하이브 내에서 스키마만 삭제될 데이터는그대로 존재한다. 그래서 중요한 데이터의 경우 실수를 방지하기 위해 외부 테이블로 만드는것을 권장한다.

 

테이블의 속성이 매니지드 또는 외부인지 확인할 있는 방법은 DESCRIBE EXTENDED 명령을 사용한다.

DESCRIBE EXTENDED 테이블명;

  

 

 

아래 스크립트는 매니지드 테이블처럼 스키마만 복사하여 외부 테이블로 생성한다.

create external table if not exists testdb.tbl_b

like testdb.tbl_a

location '/user/data/';

 

스키마를 복사하려는 원본 테이블이 외부 테이블인 경우 EXTERNAL 명령을 생략하여도 외부 테이블로 생성된다.

 

 

 

2020-06-24 / Sungwook Kang / http://sungwookkang.com

 

 

Hadoop, Big Data, 하둡, 빅데이터, 데이터분석, HDFS, 하둡 파일 시스템, Hive, 하이브, 하이브 테이블, Hive table, 하이브쿼리, Hive SQL

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 data_type [COMMENT col_comment], ...)]

  [CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]

  [SKEWED BY (col_name, col_name, ...)                  -- (Note: Available in Hive 0.10.0 and later)]

     ON ((col_value, col_value, ...), (col_value, col_value, ...), ...)

     [STORED AS DIRECTORIES]

  [

   [ROW FORMAT row_format]

   [STORED AS file_format]

     | STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)]  -- (Note: Available in Hive 0.6.0 and later)

  ]

  [LOCATION hdfs_path]

  [TBLPROPERTIES (property_name=property_value, ...)]   -- (Note: Available in Hive 0.6.0 and later)

  [AS select_statement];   -- (Note: Available in Hive 0.5.0 and later; not supported for external tables)

 

“IF NOT EXISTS” 명령은 테이블의 존재 유무를 확인하여, 테이블이 없을 경우 명령을 실행한다. 명령을 사용하면, 동일한 이름의 테이블이 있을경우 에러를 발생시키지 않고 다음 단계로 진행 있다. 하지만 이름만 확인할 스키마 구조까지 확인하는것은 아니다.

 

아래 스크립트는 Hive에서 테이블의 데이터를 제외한 스키마만 복사한다.

CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name

  LIKE existing_table_or_view_name

[LOCATION hdfs_path];

 

ex) CREATE TABLE IF NOT EXISTS testdb.mytable2 LIKE testdb.mytable;

 

테이블 정보를 확인하기 위해서는 DESCRIBE 명령을 사용한다.

describe tlb_a;

 

 

테이블의 정보를 자세히 확인할 때에는 EXTENDED 명령을 추가한다. EXTENDED 사용할 경우 자세한 정보가 출력되지만, 사람이 읽기에는 줄바꿈 등이 되지 않아 가독성이 불편하다.

describe extended tlb_a;

 

 

 

EXTENDED 대신 FROMATTED 사용하면 줄바꿈등이 적용되어 가독성이 뛰어나다.

describe formatted tlb_a;

 

 

EXTENDED 옵션을 사용한 출력에서 location 항목은 테이블의 데이터를 저장하는 HDFS 디렉터리 전체 URI 경로를 보여준다.

 

 

[참고자료]

 

 

 

2020-06-22 / Sungwook Kang / http://sungwookkang.com

 

 

Hadoop, Big Data, 하둡, 빅데이터, 데이터분석, HDFS, 하둡 파일 시스템, Hive, 하이브, 하이브 테이블, Hive table, 하이브쿼리, Hive SQL

 

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 접속하여 테이블 목록을 살펴보면 매우 많은 테이블이 있는 것을 확인할 있다. 필자의 경우 MySQL 메타데이터베이스로 사용하였다.

# Tables_in_hive

AUX_TABLE

MASTER_KEYS

SD_PARAMS

BUCKETING_COLS

METASTORE_DB_PROPERTIES

SEQUENCE_TABLE

CDH_VERSION

NEXT_COMPACTION_QUEUE_ID

SERDES

CDS

NEXT_LOCK_ID

SERDE_PARAMS

COLUMNS_V2

NEXT_TXN_ID

SKEWED_COL_NAMES

COMPACTION_QUEUE

NOTIFICATION_LOG

SKEWED_COL_VALUE_LOC_MAP

COMPLETED_COMPACTIONS

NOTIFICATION_SEQUENCE

SKEWED_STRING_LIST

COMPLETED_TXN_COMPONENTS

NUCLEUS_TABLES

SKEWED_STRING_LIST_VALUES

DATABASE_PARAMS

PARTITIONS

SKEWED_VALUES

DBS

PARTITION_EVENTS

SORT_COLS

DB_PRIVS

PARTITION_KEYS

TABLE_PARAMS

DELEGATION_TOKENS

PARTITION_KEY_VALS

TAB_COL_STATS

FUNCS

PARTITION_PARAMS

TBLS

FUNC_RU

PART_COL_PRIVS

TBL_COL_PRIVS

GLOBAL_PRIVS

PART_COL_STATS

TBL_PRIVS

HIVE_LOCKS

PART_PRIVS

TXNS

IDXS

ROLES

TXN_COMPONENTS

INDEX_PARAMS

ROLE_MAP

TYPES

KEY_CONSTRAINTS

SDS

TYPE_FIELDS

 

 

VERSION

 

 

WRITE_SET

 

메타 데이터베이스 테이블에서 많이 사용되는 정보는 DBS, TBLS, PARTITIONS 이다. 테이블을 조인하여 기본적인 메타데이터 정보를 확인할 있다.

·       DBS : hive 생성되어 있는 데이터베이스 정보

·       TBS : hive 생성되어 있는 테이블 정보

·       PARTITIONS : hive 생성되어 있는 파티션 정보

 

아래 스크립트는 DBS 테이블과 TBLS 테이블을 조인하여 DB 어떤 테이블에 생성되어 있는지 확인할 있다.

SELECT

              *

FROM hive.TBLS as t

              inner join hive.DBS as d on t.DB_ID = d.DB_ID

ORDER BY d.NAME;

 

 

아래 스크립트는 특정 이름(예제에서는 key라는 글자를 포함하는) 포함하는 테이블을 찾아서 DB 정보, 테이블, 파티션 정보를 출력한다.

SELECT

              d.NAME, t.TBL_NAME, p.PART_NAME

FROM hive.DBS as d

              inner join hive.TBLS as t on d.DB_ID = t.DB_ID

    inner join hive.PARTITIONS as p on t.TBL_ID = p.TBL_ID

where t.TBL_NAME like '%key%';

 

 

 

 

 

 

2019-12-18 / Sungwook Kang / http://sungwookkang.com

 

Hadoop, hive, 하이브 메타 데이터베이스, hive meta database, 하이브 테이블, 하이브 테이블 정보, 메타 정보

'SW Engineering > Hadoop' 카테고리의 다른 글

Hive Skewed (스큐)  (0) 2019.12.24
Hive Partition 생성,수정,복구  (0) 2019.12.21
Hive Meta Store 설정  (0) 2019.12.18
MapReduce 메모리 부족으로 인한 쿼리 실패  (0) 2019.12.14
HiveServer2 와 Beeline  (0) 2019.12.13

Hive 테이블 생성

 

·       Version : Hive

 

Apache Hive에서 테이블은 HDFS 저장된 파일과 디렉터리 구조에 대한 메터 정보를 저장한다.  Hive HiveQL이라는 SQL 유사한 언어를 제공하며 아래와 같은 특징이 있다.

·       Hive에서 사용하는 테이블은 HDFS 저장되며, HDFS 한번 저장한 파일은 수정할 없기 때문에 UPDATE DELETE 사용할 없다.

·       데이터를 INSERT할때 테이블에 입력하거나 입력된 데이터를 덮어쓰는 경우(INSERT OVERWRITE 구문 사용)에만 가능하다.

·       HiveQL FROM 절에만 서브쿼리를 사용할 있다.

·       HiveQL 뷰는 읽기 전용이다.

·       SELECT 문을 사용할때 HAVING절을 사용할 없다.

·       Stored Procedure 제공하지 않으며 MapReduce 스크립트를 실행 있다.

 

아래 명령은 테이블을 생성하는 구문으로 다양한 옵션이 있다. CREATE TABLE 대한 다양한 옵션은 공식 문서를 참고 한다.

·       Create/Drop/Truncate Table : https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-CreateTableCreate/Drop/TruncateTable

CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.] table_name

[(col_name data_type [COMMENT col_comment], ...)]

[COMMENT table_comment]

[ROW FORMAT row_format]

[STORED AS file_format]

 

[LOCATION]

Hive 테이블을 생성할때 저장위치를 정할 있는데, 기본값은 Hive 데이터베이스 디렉터리에 위치하며 테이블의 이름으로 폴더가 생성된다.

 

[TABLE TYPE]

Hive 테이블에는 3가지 형식이 있으며 아래와 같은 특징이있다.

·       MANAGED : 기본 옵션이며 세션이 종료되어도 테이블의 데이터와 파일은 유지된다. 테이블 삭제시 파일도 함께 삭제 된다.

·       EXTERNAL : 세션이 종료되어도 테이블의 데이터와 파일은 유지되며, 테이블 삭제시에도 파일은 유지된다. 테이블 삭제 동일한 이름으로 테이블을 다시 생성하면 데이터가 그대로 보존되어 있음을 확인할 있다. 사용자 실수를 방지하기 위해서는 옵션을 사용한다.

·       TEMPORARY : 현재 세션에서만 사용하는 테이블을 생성하는 것으로 세션이 종료되면 테이블 파일이 삭제 된다.

 

[PARTITION]

파티션은 폴더 구조로 데이터를 분할하여 저장하고, PARITION BY 지정한 컬럼을 기준으로 폴더 단위로 데이터가 생성된다. 하이브는 폴더 단위로 데이터를 읽기 때문에  파이션을 구분하지 않으면 모든 테이블의 데이터를 읽게되어 조회시간이 길어진다. 아래 스크립트는 일별 파티션 테이블을 생성한다.

CREATE TABLE tbl(

  col1 STRING

) PARTITIONED BY (yymmdd STRING);

 

 

[ROW FROAMT]

ROW FORMAT 데이터를 컬럼 단위로 구분하는 구분자(delimeter) 데이터를 해석하는 방법을 지정하는 서드 (SERDEPROPERTIES) 지정한다. 사용자가 지정하지 않으면 기본 구분자를 사용한다. 아래 명령은 기본적으로 사용되는 구분자이다.

FIELDS TERMINATED BY '\t'            -- 컬럼 구분

COLLECTION ITEMS TERMINATED BY ','   -- 리스트 구분

MAP KEYS TERMINATED BY '='           -- 맵데이터의 키밸류 구분

LINES TERMINATED BY '\n'             -- row 구분

ESCAPED BY '\\'                     

NULL DEFINED AS 'null'               

 

[STORAGE FORMATS]

HIVE TEXTFILE, SEQUENCEFILE, ORC, PARQUET 등의 저장포맷을 지정하며, 사용자 정의 파일 형식도 지원한다. 기본 포맷은TEXTFILE 이다. 자세한 내용은 아래 링크를 참고한다.

·       https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-StorageFormatsStorageFormatsRowFormat,StorageFormat,andSerDe

 

아래 스크립트는 employee 테이블을 생성하는 예제 스크립트 이다.

CREATE TABLE IF NOT EXISTS employee (

eid int,

name String,

salary String,

destination String)

COMMENT 'Employee details'

ROW FORMAT DELIMITED

FIELDS TERMINATED BY '\t'

LINES TERMINATED BY '\n'

STORED AS TEXTFILE;

 

아래 스크립트는 JAVA에서 JDBC 사용하여 Hive 테이블을 생성하고 sample.txt 데이터를 테이블로 로드한다.

import java.sql.SQLException;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.Statement;

import java.sql.DriverManager;

 

public class HiveCreateTable {

   private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver";

  

   public static void main(String[] args) throws SQLException {

  

      // Register driver and create driver instance

      Class.forName(driverName);

     

      // get connection

      Connection con = DriverManager.getConnection("jdbc:hive://localhost:10000/userdb", "", "");

     

      // create statement

      Statement stmt = con.createStatement();

     

      // execute statement

      stmt.executeQuery("CREATE TABLE IF NOT EXISTS "

         +" employee ( eid int, name String, "

         +" salary String, destignation String)"

         +" COMMENT ‘Employee details’"

         +" ROW FORMAT DELIMITED"

         +" FIELDS TERMINATED BY ‘\t’"

         +" LINES TERMINATED BY ‘\n’"

         +" STORED AS TEXTFILE;");

        

      System.out.println(“ Table employee created.”);

      con.close();

   }

}

 

 

[참고자료]

·       https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-CreateTableCreate/Drop/TruncateTable

·       https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-StorageFormatsStorageFormatsRowFormat,StorageFormat,andSerDe

 

 

2019-11-26 / Sungwook Kang / http://sungwookkang.com

 

Hadoop, Hive, 하둡, 하이브, Hive Datawarehouse, 하이브 테이블, Hive Table

+ Recent posts