Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- scrapy
- Java
- effective python
- yarn
- 코딩더매트릭스
- HelloWorld
- 딥러닝
- Sort
- 선형대수
- hive
- 그래프이론
- 주식분석
- recursion
- C언어
- graph
- RNN
- LSTM
- GRU
- tensorflow
- 하둡2
- 알고리즘
- hadoop2
- collections
- codingthematrix
- python
- 텐서플로
- 파이썬
- NumPy
- 하이브
- C
Archives
- Today
- Total
EXCELSIOR
하이브 조인(Hive Join) 본문
맵리듀스로 조인을 구현하려면 몇십 줄의 클래스를 작성해야하지만, 하이브를 이용하면 쿼리문을 통해 간단하게 조인을 할 수 있다.
단, 다음의 제약사항이 있다.
- 하이브는 EQ조인만 지원한다. EQ조인은 두 테이블 대상으로 동일성을 비교한 후, 그 결과를 기준으로 조인하는 것이다. 이 조인에서는 조인 서술자로 등호(=)만 사용할 수 있다.
- 하이브는 FROM 절에 테이블 하나만 지정할 수 있고, ON 키워드를 사용해 조인을 처리해야 한다.
이번 포스팅에서는 교재에 나와있는대로 하이브의 조인 기능을 사용해 항공 운항 지연 데이터와 항공사 코드 테이블을 조인해 볼 것이다.
먼저, 항공사 코드 데이터를 저장하기 위한 테이블을 생성한다. (항공사 코드 데이터는 http://stat-computing.org/dataexpo/2009/carriers.csv에서 다운로드 받을 수 있다.)
hive> CREATE TABLE carrier_code(Code STRING, Description STRING) > ROW FORMAT DELIMITED > FIELDS TERMINATED BY ',' > LINES TERMINATED BY '\n' > STORED AS TEXTFILE; OK Time taken: 1.073 seconds
테이블이 생성되면 다음과 같이 데이터를 업로드 한다.
hive> LOAD DATA LOCAL INPATH '/usr/local/hadoop2/study/carriers.csv' > OVERWRITE INTO TABLE carrier_code; Loading data to table default.carrier_code OK Time taken: 1.998 seconds
1. 내부 조인(INNER JOIN)
항공 운항 지연 테이블과 항공사 코드 테이블을 항공 운항 지연 테이블의 UniqueCarrier과 항공사 코드 테이블의 Code, 즉 항공사 코드로 내부 조인을 한다. 각각의 테이블의 별칭(Alias)를 A, B로 사용하였다.
하이브QL도 SQL 처럼 테이블 alias을 지원한다. 하지만 alias앞에 AS 키워드를 추가하면 오류가 발생하므로 사용할 때 주의해야 한다.
hive> SELECT A.Year, A.UniqueCarrier, B.Description, COUNT(*) > FROM airline_delay A > JOIN carrier_code B ON (A.UniqueCarrier = B.Code) > WHERE A.ArrDelay > 0 and A.month = 1 > GROUP BY A.Year, A.UniqueCarrier, B.Description; OK a.year a.uniquecarrier b.description c3 2008 B6 JetBlue Airways 6603 2008 EV Atlantic Southeast Airlines 10267 2008 FL AirTran Airways Corporation 9681 2008 MQ American Eagle Airlines Inc. 20336 2008 NW Northwest Airlines Inc. 16325 2008 OH Comair Inc. 8748 2008 UA United Air Lines Inc. 20427 2008 AA American Airlines Inc. 27112 2008 AS Alaska Airlines Inc. 5662 2008 CO Continental Air Lines Inc. 12630 2008 DL Delta Air Lines Inc. 15509 2008 HA Hawaiian Airlines Inc. 997 2008 OO Skywest Airlines Inc. 24881 2008 9E Pinnacle Airlines Inc. 10350 2008 AQ Aloha Airlines Inc. 963 2008 F9 Frontier Airlines Inc. 4112 2008 US US Airways Inc. (Merged with America West 9/05. Reporting for both starting 10/07.) 14828 2008 WN Southwest Airlines Co. 44143 2008 XE Expressjet Airlines Inc. 16351 2008 YV Mesa Airlines Inc. 9502 Time taken: 30.339 seconds, Fetched: 20 row(s)
2. 외부 조인(OUTER JOIN)
외부조인을 테스트하기 위해 항공사 코드에서 일부 항공사 코드를 삭제한다. 'carriers.csv'파일의 1389번째 행을 다음과 같이 삭제한다.
sed -e '1389d' carrier.csv > carriers_new.csv
그런 다음 하이브 메타스토어 데이터베이스에 항공사 코드 테이블을 추가로 생성한뒤 데이터를 업로드한다.
hive> CREATE TABLE carrier_code2(Code STRING, Description STRING) > ROW FORMAT DELIMITED > FIELDS TERMINATED BY ',' > LINES TERMINATED BY '\n' > STORED AS TEXTFILE; OK Time taken: 1.073 seconds hive> LOAD DATA LOCAL INPATH '/usr/local/hadoop2/study/carriers_new.csv' > OVERWRITE INTO TABLE carrier_code2; Loading data to table default.carrier_code OK Time taken: 1.998 seconds
이제 LEFT JOIN쿼리를 입력하여 외부 조인을 한다.
hive> SELECT A.Year, A.UniqueCarrier, B.Code, B.Description > FROM airline_delay A > LEFT OUTER JOIN carrier_code2 B ON (A.UniqueCarrier = B.Code) > WHERE A.UniqueCarrier = 'WN' > LIMIT 10; OK a.year a.uniquecarrier b.code b.description 2008 WN NULL NULL 2008 WN NULL NULL 2008 WN NULL NULL 2008 WN NULL NULL 2008 WN NULL NULL 2008 WN NULL NULL 2008 WN NULL NULL 2008 WN NULL NULL 2008 WN NULL NULL 2008 WN NULL NULL Time taken: 22.968 seconds, Fetched: 10 row(s)
'DataBase > Hadoop' 카테고리의 다른 글
아파치 스쿱(Apache Sqoop) (1) | 2016.12.07 |
---|---|
하이브 버킷(Hive Bucket) (0) | 2016.11.30 |
하이브(Hive) - 데이터 업로드 (0) | 2016.11.26 |
Apache-Hive : 하이브QL(Hive QL) - 테이블 생성 (0) | 2016.11.21 |
하이브 (Apache Hive) 개념 및 설치 (아파치 더비 사용) (0) | 2016.11.14 |
Comments