일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- recursion
- scrapy
- 그래프이론
- 파이썬
- 텐서플로
- RNN
- collections
- 하둡2
- Java
- C언어
- python
- hadoop2
- C
- 선형대수
- NumPy
- yarn
- 코딩더매트릭스
- tensorflow
- hive
- 하이브
- 알고리즘
- GRU
- 주식분석
- codingthematrix
- graph
- Sort
- LSTM
- effective python
- HelloWorld
- 딥러닝
- Today
- Total
EXCELSIOR
Apache-Hive : 하이브QL(Hive QL) - 테이블 생성 본문
1. 하이브QL (HiveQL)
하이브는 하이브QL 이라는 SQL문과 유사한 언어를 제공한다. 대부분의 기능은 SQL과 유사하지만 다음과 같은 차이점이 있다.
- 하이브에서 사용하는 데이터가 HDFS에 저장되는데, HDFS가 한 번 저장한 파일은 수정할 수 없기 때문에 UPDATE와 DELETE는 사용할 수 없다. 또한, INSERT도 비어 있는 테이블에 입력하거나 이미 입력된 데이터를 덮어 쓰는 경우에만 가능하다. 따라서 하이브QL은 "INSERT OVERWRITE"라는 키워드를 사용한다.
- SQL은 어떠한 절에서도 서브쿼리를 사용할 수 있지만 하이브QL은 FROM 절에서만 서브 쿼리를 사용할 수 있다.
- SQL의 뷰는 업데이트할 수 있고, 구체화된 뷰 또는 비구체화된 뷰를 지원하지만 하이브QL의 뷰는 읽기 전용이며, 비구체화된 뷰만 지원한다.
- SELECT 문을 사용할 때 HAVING 절을 사용할 수 없다.
- 저장 프로시저(stored procedure)를 지원하지 않지만 맵리듀스 스크립트를 실행할 수 있다.
1) 테이블 생성
교재에서는 미국 항공 운항 지연 데이터를 분석하기 위한 하이브QL 쿼리문을 작성하였다. 참고로 하이브QL은 대소문자를 구분하지 않는다.
hive> CREATE TABLE airline_delay(Year INT, Month INT, > DayofMont INT, DayOfWeek INT, > DepTime INT, CRSDepTime INT, > ArrTime INT, CRSArrTime INT, > UniqueCarrier STRING, FlightNum INT, > TaiNum STRING, ActualElapsedTime INT, > CRSElapsedTime INT, AirTime INT, > ArrDelay INT, DepDelay INT, > Origin STRING, Dest STRING, > Distance INT, TaxiIn INT, > TaxiOut INT, Cancelled INT, > CancellationCode STRING > COMMENT 'A=carrier, B=weather, C=NAS, D=security', > Diverted INT COMMENT '1=yes, 0=no', > CarrierDelay STRING, WeatherDelay STRING, > NASDelay STRING, SecurityDelay STRING, > LateAircraftDelay STRING) > COMMENT 'The data consitsts of filght arrival and departure details for all commercial flights within the USA, froom October 1987 to April 2008' > PARTITIONED BY (delayYear INT) > ROW FORMAT DELIMITED > FIELDS TERMINATED BY ',' > LINES TERMINATED BY '\n' > STORED AS TEXTFILE; OK Time taken: 1.271 seconds
하이브QL(HiveQL)의 컬럼 타입은 다음 표와 같다.
[출처 :http://www.slideshare.net/madvirus/hive-29724108]
위의 airline_delay 테이블에서는 INT와 STRING타입만 사용했다.
COMMENT 절은 테이블의 설명을 참고용으로 등록하는 부분이다.
PARTITIONED BY (delayYear INT)절은 테이블의 파티션을 설정하는 부분이다. 하이브는 쿼리문의 수행속도를 향상시키기 위해 파티션을 설정할 수 있다. 파티션을 설정하면 해당 테이블의 데이터를 파티션별로 티렉터리를 생성해서 저장하게 된다. 여기서는 delayYear별로 디렉터리가 생성되게 된다.
ROW FORMAT 절은 해당 테이블 내의 데이터가 어떠한 형식으로 저장되는지 설정한다. 이 쿼리문은 필드를 콤마 기준으로 구분하고, 행과 행은 '\n' 값으로 구분한다.
SORTED AS 절은 데이터 저장 파일 포맷을 의미한다. 하이브는 텍스트 파일을 위한 TEXTFILE과 시퀀스파일을 저장하기 위한 SEQUENCEFILE을 지원한다.
2)테이블 목록 조회
airline_delay 테이블을 생성하고 나면 다음과 같이 메타스토어 데이터베이스에 저장된 테이블 목록을 조회한다.
hive> SHOW TABLES; OK tab_name airline_delay Time taken: 0.218 seconds, Fetched: 1 row(s)
테이블을 생성할 때 CREATE 문 뒤에 EXTERNAL 키워드를 추가할 수 있다. EXTERNAL 키워드로 생성하는 테이블은 '외부테이블'이라고 하는데 외부테이블은 hive.metastore.warehouse.dir 속성이 가리키는 디렉터리에 데이터를 저장하지 않고, 테이블 생성 시 설정한 경로로 데이터를 저장한다. 사용자가 실수로 테이블을 DROP 했더라도 데이터가 보존되는 장점이 있다. 다음은 외부 테이블 생성 예이다.
hive> CREATE EXTERNAL TABLE airline_delay(Year INT, Month INT, > DayofMont INT, DayOfWeek INT, > DepTime INT, CRSDepTime INT, > ArrTime INT, CRSArrTime INT, > UniqueCarrier STRING, FlightNum INT, > TaiNum STRING, ActualElapsedTime INT, > CRSElapsedTime INT, AirTime INT, > ArrDelay INT, DepDelay INT, > Origin STRING, Dest STRING, > Distance INT, TaxiIn INT, > TaxiOut INT, Cancelled INT, > CancellationCode STRING > COMMENT 'A=carrier, B=weather, C=NAS, D=security', > Diverted INT COMMENT '1=yes, 0=no', > CarrierDelay STRING, WeatherDelay STRING, > NASDelay STRING, SecurityDelay STRING, > LateAircraftDelay STRING) > COMMENT 'The data consitsts of filght arrival and departure details for all commercial flights within the USA, froom October 1987 to April 2008' > PARTITIONED BY (delayYear INT) > ROW FORMAT DELIMITED > FIELDS TERMINATED BY ',' > LINES TERMINATED BY '\n' > STORED AS TEXTFILE > LOCATION '/user/root/airline_delay';
3) DESCRIBE로 테이블의 컬럼 확인
테이블이 정상적으로 구성돼 있는지 DESCRIBE 명령어를 이용해 확인한다.
hive> DESCRIBE airline_delay; OK col_name data_type comment year int month int dayofmont int dayofweek int deptime int crsdeptime int arrtime int crsarrtime int uniquecarrier string flightnum int tainum string actualelapsedtime int crselapsedtime int airtime int arrdelay int depdelay int origin string dest string distance int taxiin int taxiout int cancelled int cancellationcode string A=carrier, B=weather, C=NAS, D=security diverted int 1=yes, 0=no carrierdelay string weatherdelay string nasdelay string securitydelay string lateaircraftdelay string delayyear int # Partition Information # col_name data_type comment delayyear int Time taken: 0.174 seconds, Fetched: 35 row(s)
4) 테이블 수정
이미 생성된 테이블은 ALTER TABLE 을 이용해 수정할 수 있다. 예를 들어, 테이블 이름은 ALTER TABLE에 RENAME옵션을 설정해 변경할 수 있다.
hive> ALTER TABLE airline_delay RENAME TO delay_statistics;
'DataBase > Hadoop' 카테고리의 다른 글
하이브 조인(Hive Join) (0) | 2016.11.30 |
---|---|
하이브(Hive) - 데이터 업로드 (0) | 2016.11.26 |
하이브 (Apache Hive) 개념 및 설치 (아파치 더비 사용) (0) | 2016.11.14 |
하둡2 예제실행 (0) | 2016.11.11 |
하둡2 설치 및 실행 (가상 분산 모드) (4) | 2016.11.08 |