복붙노트

[HADOOP] multidelimeter를 사용하여 하이브에 데이터 삽입

HADOOP

multidelimeter를 사용하여 하이브에 데이터 삽입

multidelimeter를 사용하여 하이브에 데이터를 삽입하는 방법 및 구분 기호가 지정되지 않은 컬럼 사이에 데이터를 삽입하는 방법.

아래는 내 데이터입니다.

25380 20130101  2.514 -135.69   58.43     8.3     1.1     4.7     4.9     5.6     0.01 C     1.0    -0.1     0.4    97.3    36.0    69.4 -99.000 -99.000 -99.000 -99.000 -99.000 -9999.0 -9999.0 -9999.0 -9999.0 -9999.0
25380 20130102  2.514 -135.69   58.43     3.0    -0.3     1.4     1.2     0.0     0.35 C     1.3    -1.0    -0.1   100.0    89.5    98.2 -99.000 -99.000 -99.000 -99.000 -99.000 -9999.0 -9999.0 -9999.0 -9999.0 -9999.0

내 하이브 테이블에 처음 7 열만 삽입하고 위의 데이터에 대한 txt 파일을 갖고 싶습니다.

테이블 스크립트 생성 :

CREATE TABLE hotcold (a int,b int,c float,d float,e float,f float,g float,h string,i string,j string,k string,l string,m string,n string,o string,p string,q string,
r string,s string,t string,u string,v string,w string,x string,y string,z string,aa string,bb string,cc string,dd string,ee string
) 
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ('input.regex'='\\s+'); 

내 데이터 삽입 스크립트는 다음과 같습니다.

LOAD DATA LOCAL INPATH '/home/cloudera/WeatherData.txt' into table hotcold;

아래 내 선택 진술과 오류입니다 :

select * from hotcold;

오류 :

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

해결법

  1. ==============================

    1.각 열에는 대응하는 캡처 그룹 ()이 정규 표현식에 있어야합니다.

    각 열에는 대응하는 캡처 그룹 ()이 정규 표현식에 있어야합니다.

    아래 예제에서 문자열 시작 부분의 첫 번째 그룹 ^ (\\ d +) -는 양의 정수에 해당하고,

    \\ s + - 하나 이상의 공백 구분 기호,

    두 번째 캡처 그룹은 양의 정수 (\\ d +),

    다시 \\ s + - 하나 이상의 공백 구분 기호,

    세 번째 캡처 그룹 - ([+ -]? [0-9.] +) - 매우 엄격한 형식이 아닌 float 형식으로, + 기호 및 didits 및 dots 조합

    및. * 문자열의 끝 부분에있는 모든 문자를 허용하는 끝에. 정규식에 다른 모든 열을 추가합니다. 예제에는 세 개의 열 (세 개의 캡처 그룹)에 대한 정규식이 포함되어 있습니다.

    WITH SERDEPROPERTIES ('input.regex'='^(\\d+)\\s+(\\d+)\\s+([+-]?[0-9.]+).*') 
    

    자세한 내용은 읽기 : 정규식을 사용하여 하이브 테이블의 필드 추출

  2. from https://stackoverflow.com/questions/54088870/insert-data-in-hive-using-multidelimeter by cc-by-sa and MIT license