2016-12-13 1 views
0
내가 하나 이상의 공백하여 다음 표 소스 구분 기호를 만들 수있는 방법

: USAF 및 WBAN 사이에 공백의 수는 하나 개의 공간 예를 들어하이브 테이블 소스

CREATE EXTERNAL TABLE weather (USAF INT, WBAN INT, `Date` STRING, DIR STRING, SPD INT, GUS INT, CLG INT, SKC STRING, L STRING, M STRING, H STRING, VSB DECIMAL, MW1 STRING, MW2 STRING, MW3 STRING, MW4 STRING, AW1 STRING, AW2 STRING, AW3 STRING, AW4 STRING, W STRING, TEMP INT, DEWP INT, SLP DECIMAL, ALT DECIMAL, STP DECIMAL, MAX INT, MIN INT, PCP01 DECIMAL, PCP06 DECIMAL, PCP24 DECIMAL, PCPXX DECIMAL, SD INT) 
COMMENT 'weather table' 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' 
LINES TERMINATED BY '\n' 
LOCATION '/data/Weather'; 

입니다 'Date'와 DIR 사이에는 3 개의 공백이 있습니다.

나는 시도 다음

CREATE EXTERNAL TABLE weather (USAF INT, WBAN INT, `Date` STRING, DIR STRING, SPD INT, GUS INT, CLG INT, SKC STRING, L STRING, M STRING, H STRING, VSB DECIMAL, MW1 STRING, MW2 STRING, MW3 STRING, MW4 STRING, AW1 STRING, AW2 STRING, AW3 STRING, AW4 STRING, W STRING, TEMP INT, DEWP INT, SLP DECIMAL, ALT DECIMAL, STP DECIMAL, MAX INT, MIN INT, PCP01 DECIMAL, PCP06 DECIMAL, PCP24 DECIMAL, PCPXX DECIMAL, SD INT) 
COMMENT 'weather table' 
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' 
WITH SERDEPROPERTIES (
    "input.regex" = "\s+" 
) 
STORED AS TEXTFILE 
LOCATION '/data/Weather'; 

을하지만 select * from weather limit 100; 같은 간단한 쿼리를 실행했을 때 다음과 같은 오류 있어요 :

Failed with exception java.io.IOException:org.apache.hadoop.hive.serde2.SerDeException: Number of matching groups doesn't match the number of columns 
Time taken: 2.958 seconds 
+0

내 제안은 데이터를 정리하여 필요한 열을 갖거나 구분 기호를 변경해야한다는 것입니다. 귀하의 경우에 정규 표현식을 사용하면 열이 일치하지 않도록 모든 연속 된 공간을 계산하므로 공간이 필요하지 않습니다. –

답변

0

를 사용하여 멀티 구분 serde

ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe' 
WITH SERDEPROPERTIES ("field.delim"="\\s+") 

당신의 최종 검색어는 다음과 같이 표시 될 수 있습니다.

CREATE EXTERNAL TABLE weather (USAF INT, WBAN INT, `Date` STRING, DIR STRING, SPD INT, GUS INT, CLG INT, SKC STRING, L STRING, M STRING, H STRING, VSB DECIMAL, MW1 STRING, MW2 STRING, MW3 STRING, MW4 STRING, AW1 STRING, AW2 STRING, AW3 STRING, AW4 STRING, W STRING, TEMP INT, DEWP INT, SLP DECIMAL, ALT DECIMAL, STP DECIMAL, MAX INT, MIN INT, PCP01 DECIMAL, PCP06 DECIMAL, PCP24 DECIMAL, PCPXX DECIMAL, SD INT) 
COMMENT 'weather table' 
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe' 
WITH SERDEPROPERTIES ("field.delim"="\\s+") 
STORED AS TEXTFILE 
LOCATION '/data/Weather'; 

희망이 도움이됩니다!