하이브는 CSV 형식의 데이터를 하둡에서 읽을 수 있게 해주는 CSVSerde를 제공한다.
하이브를 설치하고 테스트해 볼 겸 OpenCSVSerde를 이용해서 테이블을 만들고 데이터 INSERT까지 해보려고 한다.
공공데이터 포털에서 가져온 데이터는 63만 건 정도 되었는데 간단한 테스트를 위해 5000건만 넣어보려고 한다.
데이터를 넣기 전에 항상 인코딩을 먼저 확인해야 한다. 그렇지 않으면 한글이 깨져 데이터를 읽을 수 없게 된다.
따라서 인코딩을 utf-8로 맞춰주자.
[root@node1 test]# file -bi electric_car_chargingstation.csv
text/plain; charset=iso-8859-1
[root@node1 test]# iconv -c -f euc-kr -t utf-8 electric_car_chargingstation.csv > electric_car_chargingstation2.csv
[root@node1 test]# file -bi electric_car_chargingstation2.csv
text/plain; charset=utf-8
INSERT 할 데이터 확인
//한국전력공사_서울시 전기차 충전소 충전량
[root@node1 test]# head electric_car_chargingstation2.csv
급속,영등포전력지사,서울특별시 영등포구 경인로 878,50,0.05,0,0,2021-01-01 2:06,2021-01-01 2:06
급속,영등포전력지사,서울특별시 영등포구 경인로 878,50,13.1,0,29,2021-01-02 14:58,2021-01-02 15:28
급속,영등포전력지사,서울특별시 영등포구 경인로 878,50,47.56,1,33,2021-01-02 20:57,2021-01-02 22:31
급속,영등포전력지사,서울특별시 영등포구 경인로 878,50,24.77,0,38,2021-01-04 12:12,2021-01-04 12:51
급속,영등포전력지사,서울특별시 영등포구 경인로 878,50,19.21,0,29,2021-01-04 22:51,2021-01-04 23:21
급속,영등포전력지사,서울특별시 영등포구 경인로 878,50,18.86,0,31,2021-01-05 14:32,2021-01-05 15:03
급속,영등포전력지사,서울특별시 영등포구 경인로 878,50,16.66,0,28,2021-01-07 16:04,2021-01-07 16:32
급속,영등포전력지사,서울특별시 영등포구 경인로 878,50,12.96,0,31,2021-01-07 10:36,2021-01-07 11:08
급속,영등포전력지사,서울특별시 영등포구 경인로 878,50,15.97,0,29,2021-01-07 15:25,2021-01-07 15:54
급속,영등포전력지사,서울특별시 영등포구 경인로 878,50,6.42,0,16,2021-01-07 17:13,2021-01-07 17:30
.
.
.
먼저 테이블을 생성한다.
CREATE EXTERNAL TABLE csvserde_test (
charging_mode string,
charging_station_name string,
address string,
charger_capacity string,
charge_amount string,
filling string,
charge_start_time timestamp,
charge_end_time timestamp
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
'escapeChar'='\\',
'quote'='"',
'seperatorChar'=',')
STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION '/user/hive/csvserde_test';
- escapeChar : 칼럼에 데이터를 입력할 때 파싱 하지 않고 무시
- quoteChar : 칼럼의 값을 지정한 문자로 묶어줌
- seperatorChar : 칼럼간의 구분자
아래와 같은 옵션을 주면 CSV 파일 내 첫 번째 행에 컬럼명이 있을 경우 헤더를 스킵할 수 있다.
TBLPROPERTIES (
'skip.header.line.count'='1'
)
이제 테이블을 생성했으니 데이터를 하둡에 넣어보자.
[root@node1 test]# hdfs dfs -copyFromLocal electric_car_chargingstation2.csv /user/hive/csvserde_test
[root@node1 test]# hdfs dfs -ls /user/hive/csvserde_test
Found 1 items
-rw-r--r-- 3 root hdfs 620154 2022-05-20 15:10 /user/hive/csvserde_test/electric_car_chargingstation2.csv
하이브에서 테이블을 조회하면 데이터가 나오는 것을 볼 수 있다.
select * from csvserde_test;
+------------------------------+--------------------------------------+------------------------+---------------------------------+------------------------------+------------------------+----------------------------------+--------------------------------+
| csvserde_test.charging_mode | csvserde_test.charging_station_name | csvserde_test.address | csvserde_test.charger_capacity | csvserde_test.charge_amount | csvserde_test.filling | csvserde_test.charge_start_time | csvserde_test.charge_end_time |
+------------------------------+--------------------------------------+------------------------+---------------------------------+------------------------------+------------------------+----------------------------------+--------------------------------+
| 급속 | 영등포전력지사 | 서울특별시 영등포구 경인로 878 | 50 | 0.05 | 0 | 0 | 2021-01-01 2:06 |
| 급속 | 영등포전력지사 | 서울특별시 영등포구 경인로 878 | 50 | 13.1 | 0 | 29 | 2021-01-02 14:58 |
| 급속 | 영등포전력지사 | 서울특별시 영등포구 경인로 878 | 50 | 47.56 | 1 | 33 | 2021-01-02 20:57 |
| 급속 | 영등포전력지사 | 서울특별시 영등포구 경인로 878 | 50 | 24.77 | 0 | 38 | 2021-01-04 12:12 |
| 급속 | 영등포전력지사 | 서울특별시 영등포구 경인로 878 | 50 | 19.21 | 0 | 29 | 2021-01-04 22:51 |
| 급속 | 영등포전력지사 | 서울특별시 영등포구 경인로 878 | 50 | 18.86 | 0 | 31 | 2021-01-05 14:32 |
| 급속 | 영등포전력지사 | 서울특별시 영등포구 경인로 878 | 50 | 16.66 | 0 | 28 | 2021-01-07 16:04 |
| 급속 | 영등포전력지사 | 서울특별시 영등포구 경인로 878 | 50 | 12.96 | 0 | 31 | 2021-01-07 10:36 |
| 급속 | 영등포전력지사 | 서울특별시 영등포구 경인로 878 | 50 | 15.97 | 0 | 29 | 2021-01-07 15:25 |
| 급속 | 영등포전력지사 | 서울특별시 영등포구 경인로 878 | 50 | 6.42 | 0 | 16 | 2021-01-07 17:13 |
| 급속 | 영등포전력지사 | 서울특별시 영등포구 경인로 878 | 50 | 6.92 | 0 | 14 | 2021-01-12 9:34 |
| 급속 | 영등포전력지사 | 서울특별시 영등포구 경인로 878 | 50 | 23.89 | 0 | 37 | 2021-01-12 16:12 |
| 급속 | 영등포전력지사 | 서울특별시 영등포구 경인로 878 | 50 | 17.18 | 0 | 29 | 2021-01-13 9:02 |
| 급속 | 영등포전력지사 | 서울특별시 영등포구 경인로 878 | 50 | 3.91 | 0 | 9 | 2021-01-13 13:03 |
| 급속 | 영등포전력지사 | 서울특별시 영등포구 경인로 878 | 50 | 13.21 | 0 | 23 | 2021-01-13 12:38 |
| 급속 | 영등포전력지사 | 서울특별시 영등포구 경인로 878 | 50 | 1.42 | 0 | 3 | 2021-01-13 13:15 |
'Hive' 카테고리의 다른 글
Hive Partition (0) | 2022.05.26 |
---|---|
[Hive] Hive 3버전 특징 (0) | 2022.04.19 |
[Hive] Managed Table과 External Table (0) | 2022.04.19 |
[Hive]HiveServer2 와 Beeline (0) | 2022.03.16 |
[Hive] Hive 3.1.2 설치 (CentOS7, metastore - PostgreSQL) (0) | 2022.03.16 |