SW Engineering/Hadoop

Hive 테이블 생성

SungWookKang 2019. 11. 27. 01:08
반응형

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

반응형