How to insert csv data using sql query even include ","
SparkSQL에서 제공하는 Thrift Server.sh를 실행하면 10000번 포트에 자동으로 Thrift Server가 실행된다.
- beeline
- beeline> !connect jdbc:hive2://localhost:10000
- username : test
- password : test
이렇게하면 Hive2 데이터베이스를 Query문으로 조작 가능하다. 데이터가 작을때에는 상관없는데 데이터의 크기가 2GB를 넘어가기 시작하면 쿼리문 쓰는게 급격하게 귀찮아 진다.
그러므로 .csv 파일을 직접 집어 넣는 방식을 사용할 것이다
근데 문제는 보통 CSV 각 데이터를 분류할때 ","를 사용하는데 데이터 자체에 ,가 있다면 LOAD DATA INPATH 사용 시 데이터가 중간에 짤리는 문제가 발생한다.
이것을 해결하는 방법은 아래와 같다.
1) csv를 저장할때 구분자(Delimiter)를 특이한 문자로 설정해준다.
2) Table 생성시 옵션을 추가한다.("quoteChar" )
요약만 하면 아래와 같은 쿼리문을 작성하면 된다.
CREATE TABLE IF NOT EXISTS [Table Name U Want]
( Data_Column1 string,
Data_Column2 string,
Data_Column3 string,
Data_Column4 string)
Comment 'My_Comment'
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
"separatorChar" = ",",
"quoteChar" ='"',
"escapeChar"="\\")
STORED AS TEXTFILE;
LOAD DATA INPATH 'CSVFile Location/FileNamecsv' INTO TABLE Table Name U Want;
이렇게 하면 데이터 자체에 ","가 있어도 알맞게 데이터가 입력된다.
이래도 안된다면 delimiter를 변경해서 다르게 저장한다.
끝,