복붙노트

[HADOOP] 어떻게 하이브에서 더블 구분 기호 (||) 할 수 있습니까?

HADOOP

어떻게 하이브에서 더블 구분 기호 (||) 할 수 있습니까?

나는 이중 파이프 (||)로 구분된다 하이브 테이블로 데이터를로드하려합니다. 나는 이것을 시도 할 때 :

샘플 I / P :

1405983600000||111.111.82.41||806065581||session-id

하이브 테이블 만들기 :

create table test_hive(k1 string, k2 string, k3 string, k4 string,) row format delimited fields terminated by '||' stored as textfile;

텍스트 파일에서 데이터로드 :

load data local inpath '/Desktop/input.txt' into table test_hive;

나는이 작업을 수행 할 때 그것은 아래의 형식으로 데이터를 저장하는 것입니다 :

1405983600000 tabspace-as-second-column 111.111.82.41 tabspace-as-fourth-column

나는 테이블의 데이터를 기대하고 같은 경우가 될 수 있습니다

1405983600000 111.111.82.41 806065581 session-id

친절하게 내가이 있지만 그것을 해결할 수없는에서 다른 옵션을 시도 나 좀 도와

해결법

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

    1.Multicharater 구분 예. || 버전 0.13까지 하이브에서 지원되지 않습니다. 종료 필드 그래서 || 나갔어 작동하지 않습니다는이에 대한 ALTER 기본입니다.

    Multicharater 구분 예. || 버전 0.13까지 하이브에서 지원되지 않습니다. 종료 필드 그래서 || 나갔어 작동하지 않습니다는이에 대한 ALTER 기본입니다.

      CREATE EXTERNAL TABLE page_view(viewTime INT, userid BIGINT,
     page_url STRING, referrer_url STRING,
     ip STRING COMMENT 'IP Address of the User',
     country STRING COMMENT 'country of origination')
     COMMENT 'This is the staging page view table'
     ROW FORMAT DELIMITED FIELDS TERMINATED BY '\054'
     SERDE serde_name WITH SERDEPROPERTIES (field.delim='||')
     STORED AS TEXTFILE
     LOCATION '<hdfs_location>';
    

    기본 serde 사용할 수 있습니다. 멀티 문자 구분 기호는 serde의 속성을 지정하여 문자를 이스케이프, 필드 라인에 사용할 수 있습니다.

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

    2.이 문제는 multidelimiter의 serde의 사용과 하이브 (14)에서 해결되었습니다. 여기에 문서를 찾아주세요. https://cwiki.apache.org/confluence/display/Hive/MultiDelimitSerDe

    이 문제는 multidelimiter의 serde의 사용과 하이브 (14)에서 해결되었습니다. 여기에 문서를 찾아주세요. https://cwiki.apache.org/confluence/display/Hive/MultiDelimitSerDe

  3. ==============================

    3.당신은 대체 serde를 사용하거나 하이브의 이전 버전을 사용하지 않으려면이 작업을 수행 할 수 있습니다 :

    당신은 대체 serde를 사용하거나 하이브의 이전 버전을 사용하지 않으려면이 작업을 수행 할 수 있습니다 :

    create external table my_table (line string) location /path/file;
    

    그런 다음 상단에보기를 만들 :

    create view my_view as select split(line,'\\|\\|')[0] as column_1 
    , split(line,'\\|\\|')[1] as column_2
    , split(line,'\\|\\|')[2] as column_3
    from my_table;
    

    뷰를 쿼리합니다. 행운을 빕니다.

  4. from https://stackoverflow.com/questions/25484015/how-can-i-do-a-double-delimiter-in-hive by cc-by-sa and MIT license