복붙노트

[HADOOP] PIG : 열 이름에서 '::'를 제거하는 방법

HADOOP

PIG : 열 이름에서 '::'를 제거하는 방법

나는 아래와 같은 돼지 관계가 있습니다.

Final = {input_module1 :: 유형 : charrray, input_module3 :: 이름 : charrr, input_module3 :: eid : long, input_module3 :: 이전 : charrr, test_id :: 유형 : charrrrr, test2r :: 이름 : charrrr}

input_md5 관계에 대한 모든 열을 하이브 테이블에 저장하려고합니다. 모든 input_md5 :: 유형 : chararray, input_md5 :: name : chararray, input_md5 :: id : long, input_md5 :: age : chararray not test test :: 유형 : chararray, test_2 :: name : chararray

pig에 input_md5의 열만 필터링하는 명령이 있습니까?

STORE = FOREACH FINAL GENERATE 모든 input_md5 :: type. 나는 돼지가 가지고 있다는 것을 알고있다 :

FOREACH FINAL GENERATE 모든 input_md5 :: type을 형식 구문으로 사용하지만 많은 열이 있으므로 코드 에서처럼 사용할 수 없습니다.

내가 시도 할 때 : STORE = FOREACH FINAL GENERATE input_md5 :: type .. bus_input_md5 :: name;

돼지는 오류를 던진다 :

org.apache.hive.hcatalog.common.HCatException : 2007 : 파티션 스키마에서 유효하지 않은 열 위치 : 위치 1에서 예상되는 열 이 (가) 열을 찾았습니다.

미리 감사드립니다.

해결법

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

    1.이 문제가 해결되었습니다 (아래 수정).

    이 문제가 해결되었습니다 (아래 수정).

    아래와 같이 일부 필터 조건과의 관계를 만듭니다.

    DUMMY_RELATION = 필터 소스 _ 테이블 : 유형 == ''; (나는 type이라는 열을 가져갔습니다. 이것은 테이블의 모든 열로 필터링 할 수 있습니다. 중요한 것은 스키마가 필요하다는 것입니다)

    FINAL_DATASET = UNION DUMMY_RELATION, SCHEMA_1, SCHEMA_2;

    (이 새로운 DUMMY_RELATIONn은 노조에서 1 위를 차지해야합니다) 이제 더 이상 :: 연산자가 없습니다. 소스 테이블 (DUMMY_RELATION으로)과 대상 테이블의 열 순서가 동일하면 열 이름이 하이브 테이블의 열 이름과 일치합니다.

    나에게 감사합니다 :)

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

    2.이런 식으로 Neethu의 예제를 구현했습니다. 오타가있을 수 있지만이 아이디어를 구현하는 방법을 보여줍니다.

    이런 식으로 Neethu의 예제를 구현했습니다. 오타가있을 수 있지만이 아이디어를 구현하는 방법을 보여줍니다.

    tableA = LOAD 'default.tableA' USING org.apache.hive.hcatalog.pig.HCatLoader();
    tableB = LOAD 'default.tableB' USING org.apache.hive.hcatalog.pig.HCatLoader();
    
    --load empty table
    finalTable = LOAD 'default.finalTable' USING org.apache.hive.hcatalog.pig.HCatLoader();
    
    --example operations that end up with '::' in column names
    g = group tableB by (id);
    j = JOIN tableA by id LEFT, g by group;
    result = foreach j generate tableA::id, tableA::col2, g::tableB;
    
    --union empty finalTable and result
    result2 = union finalTable, result;
    
    --bob's your uncle
    STORE result2 INTO 'finalTable' USING org.apache.hive.hcatalog.pig.HCatStorer();
    

    Neetu에 간다!

  3. from https://stackoverflow.com/questions/38902046/pig-how-to-remove-in-the-column-name by cc-by-sa and MIT license