복붙노트

[HADOOP] HIVE에서 외부 테이블을로드 할 때 나는 브래킷을 무시 어떻게

HADOOP

HIVE에서 외부 테이블을로드 할 때 나는 브래킷을 무시 어떻게

나는 HIVE에서 외부 테이블로 돼지 스크립트의 추출물을로드하기 위해 노력하고있어. 돼지는 다음과 같이 괄호 () (? 튜플) 사이의 각 행을 동봉 :

(1,2,3, a) (2,4,5, b) (4,2,6, c)

나는 실제로 정수로 첫 번째 열에 대한 null 값을 초래하는 브래킷을 무시 HIVE을 말할 수있는 방법을 찾을 수 없습니다.

진행 방법에 대한 어떤 생각?

나는 돼지에 평평하게 명령을 사용할 수 있습니다 알고 있지만 나는 또한 HIVE에서 직접 이러한 파일을 처리하는 방법을 배우고 싶습니다.

해결법

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

    1.한 단계에서이 작업을 수행 할 수있는 방법은 없습니다. 당신은 돼지 또는 추가 하이브 INSERT INTO에 평평하게 사용 될 또 다른 단계를해야 할 것이다.

    한 단계에서이 작업을 수행 할 수있는 방법은 없습니다. 당신은 돼지 또는 추가 하이브 INSERT INTO에 평평하게 사용 될 또 다른 단계를해야 할 것이다.

    하이브에서 당신은 외부 테이블에서 읽고 원하는 열을 만든 다음 새 테이블로 그를로드하는 데 몇 시간 분할 (문자열 필드, 문자열 패턴)을 사용할 수 있습니다. 뭔가 다른 그 형식의 데이터를 예상하고이 파일에서 읽고 않는 한 난 항상 당신이 원하는 형식으로 돼지 출력을 가진 향하다 것입니다. 그것은 모든 데이터의 비싼 다시 읽기를 저장합니다.

  2. ==============================

    2.벤 말했듯이 한 번에 할 수있는 방법입니다 ..하지만 당신은 하이브에 또 하나 개의 임시 테이블을 생성하여 그것을 할 수 있습니다.

    벤 말했듯이 한 번에 할 수있는 방법입니다 ..하지만 당신은 하이브에 또 하나 개의 임시 테이블을 생성하여 그것을 할 수 있습니다.

    나는 또 하나 개의 테이블이 더 복잡하게 만드는 중이라서 .. 그러나 그것은 나를 위해 일한 확실하지합니다.

    create external table A_TEMP (first string,second int,third int,fourth string)
    ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ',' 
    LINES TERMINATED BY '\n'
    LOCATION '/user/hdfs/Adata';
    
    create external table A (first int,second int,third int,fourth string)
    ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ',' 
    LINES TERMINATED BY '\n'
    LOCATION '/user/hdfs/Afinaldata';
    

    이제 삽입 된 데이터를 수

      insert into table A
        select cast(substr(first, 2, length(first) - 2) as int),second,third,substr(fourth, 1,length(fourth) - 1 ) from A_TEMP;
    

    나는 타입 캐스팅 성능을 명중 알고 ..하지만 주어진 시나리오 이것은 내가 가지고 올 수있는 최선이다.

  3. from https://stackoverflow.com/questions/33567778/how-do-i-ignore-brackets-when-loading-exteral-table-in-hive by cc-by-sa and MIT license