[HADOOP] 하이브는 쉼표로 인용 된 필드에 CSV를로드합니다.
HADOOP하이브는 쉼표로 인용 된 필드에 CSV를로드합니다.
하이브 테이블에 CSV 파일을로드하려고합니다.
CREATE TABLE mytable
(
num1 INT,
text1 STRING,
num2 INT,
text2 STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ",";
LOAD DATA LOCAL INPATH '/data.csv'
OVERWRITE INTO TABLE mytable;
csv는 쉼표 (,)로 구분되며 다음과 같습니다.
1, "some text, with comma in it", 123, "more text"
첫 번째 문자열에 ','가 있기 때문에 손상된 데이터를 반환합니다. 텍스트 구분 기호를 설정하거나 Hive가 문자열에서 ','를 무시하도록 만드는 방법이 있습니까?
CSV의 구분 기호는 외부 소스에서 가져온 이후 변경할 수 없습니다.
해결법
-
==============================
1.문제는 Hive가 인용 된 텍스트를 처리하지 않는다는 것입니다. 입력란 사이의 구분자 (예 : Hadoop 스트리밍 작업)를 변경하여 데이터를 사전 처리해야하거나 OpenCSV를 사용하여 파일을 구문 분석하는 맞춤 CSV SerDe를 사용할 수도 있습니다.
문제는 Hive가 인용 된 텍스트를 처리하지 않는다는 것입니다. 입력란 사이의 구분자 (예 : Hadoop 스트리밍 작업)를 변경하여 데이터를 사전 처리해야하거나 OpenCSV를 사용하여 파일을 구문 분석하는 맞춤 CSV SerDe를 사용할 수도 있습니다.
-
==============================
2.입력 데이터를 다시 만들거나 구문 분석 할 수있는 경우 CREATE TABLE에 이스케이프 문자를 지정할 수 있습니다.
입력 데이터를 다시 만들거나 구문 분석 할 수있는 경우 CREATE TABLE에 이스케이프 문자를 지정할 수 있습니다.
ROW FORMAT DELIMITED FIELDS TERMINATED BY "," ESCAPED BY '\\';
이 줄을 4 개 필드로 받아들입니다.
1,some text\, with comma in it,123,more text
-
==============================
3.Hive 0.14에서 CSV SerDe는 Hive 설치의 표준 부분입니다.
Hive 0.14에서 CSV SerDe는 Hive 설치의 표준 부분입니다.
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
(참조 : https://cwiki.apache.org/confluence/display/Hive/CSV+Serde)
-
==============================
4.구분 기호를 작은 따옴표로 묶어두면 작동합니다.
구분 기호를 작은 따옴표로 묶어두면 작동합니다.
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';
이것은 효과가있다.
-
==============================
5.FIELDS TERMINATED BY '백 슬래시를'\; '에 추가하십시오.
FIELDS TERMINATED BY '백 슬래시를'\; '에 추가하십시오.
예 :
CREATE TABLE demo_table_1_csv COMMENT 'my_csv_table 1' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\;' LINES TERMINATED BY '\n' STORED AS TEXTFILE LOCATION 'your_hdfs_path' AS select a.tran_uuid,a.cust_id,a.risk_flag,a.lookback_start_date,a.lookback_end_date,b.scn_name,b.alerted_risk_category, CASE WHEN (b.activity_id is not null ) THEN 1 ELSE 0 END as Alert_Flag FROM scn1_rcc1_agg as a LEFT OUTER JOIN scenario_activity_alert as b ON a.tran_uuid = b.activity_id;
나는 그것을 시험했으며, 효과가 있었다.
from https://stackoverflow.com/questions/13628658/hive-load-csv-with-commas-in-quoted-fields by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] HDFS 여유 공간 사용 가능 명령 (0) | 2019.06.13 |
---|---|
[HADOOP] 종료 코드와 종료 상태가 스파크에 무엇을 의미합니까? (0) | 2019.06.13 |
[HADOOP] JSON 데이터에서 HIVE 테이블을 어떻게 만들 수 있습니까? (0) | 2019.06.13 |
[HADOOP] ZooKeeper가 명령 프롬프트에서 실행 중인지 확인하려면 어떻게합니까? (0) | 2019.06.13 |
[HADOOP] Hive에서 쿼리를 실행하는 동안 출력과 함께 열 이름을 가져 오는 방법이 있습니까? (0) | 2019.06.13 |