복붙노트

[HADOOP] 돼지에서 NOT IN 절

HADOOP

돼지에서 NOT IN 절

내가 좋아하는 시도하고있다

select * from A where A.ID NOT IN (select id from B) (in sql)

sourcenew = LOAD 'hdfs://HADOOPMASTER:54310/DVTTest/Source.txt' USING PigStorage(',') as (ID:int,Name:chararray,FirstName:chararray ,LastName:chararray,Vertical_Name:chararray ,Vertical_ID:chararray,Gender:chararray,DOB:chararray,Degree_Percentage:chararray ,Salary:chararray,StateName:chararray);
destnew = LOAD 'hdfs://HADOOPMASTER:54310/DVTTest/Destination.txt' USING PigStorage(',') as (ID:int,Name:chararray,FirstName:chararray ,LastName:chararray,Vertical_Name:chararray ,Vertical_ID:chararray,Gender:chararray,DOB:chararray,Degree_Percentage:chararray ,Salary:chararray,StateName:chararray);
c= FOREACH destnew GENERATE ID;
D=FILTER sourcenew BY NOT ID (c.ID);
 org.apache.pig.tools.pigscript.parser.ParseException: Encountered " <PATH> "D=FILTER "" at line 1, column 1.
Was expecting one of:
<EOF> 
"cat" ...
"clear" ...<EOF>

여기에 대한 도움은 마지막 줄의 실행에이 점점 오류를 해결합니다.

해결법

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

    1.LEFT OUTER JOIN을 사용하고 널 (null) 필터

    LEFT OUTER JOIN을 사용하고 널 (null) 필터

    sourcenew = LOAD 'hdfs://HADOOPMASTER:54310/DVTTest/Source.txt' USING PigStorage(',') as (ID:int,Name:chararray,FirstName:chararray ,LastName:chararray,Vertical_Name:chararray ,Vertical_ID:chararray,Gender:chararray,DOB:chararray,Degree_Percentage:chararray ,Salary:chararray,StateName:chararray);
    destnew = LOAD 'hdfs://HADOOPMASTER:54310/DVTTest/Destination.txt' USING PigStorage(',') as (ID:int,Name:chararray,FirstName:chararray ,LastName:chararray,Vertical_Name:chararray ,Vertical_ID:chararray,Gender:chararray,DOB:chararray,Degree_Percentage:chararray ,Salary:chararray,StateName:chararray);
    c = FOREACH destnew GENERATE ID;
    d = JOIN sourcenew BY ID LEFT OUTER,destnew by ID;
    e = FILTER d by destnew.ID is null;
    

    노트 나는 테스트 파일의 부부와 함께 샘플 스크립트를 작성하고 아래에 당신이 당신의 파일에서 데이터를 올바르게로드하는 경우 볼 수있는 작업 solution.In 당신이 경우 검사입니다.

    있는 test1.txt

    1   abc
    2   def
    3   ghi
    4   jkl
    5   mno
    6   pqr
    7   stu
    8   vwx
    1   abc
    2   def
    3   ghi
    4   jkl
    1   abc
    2   def
    3   ghi
    1   abc
    2   def
    

    test2.txt가

    1
    2
    3
    4
    

    스크립트

    A = LOAD 'test1.txt' USING PigStorage('\t') AS (aid:int,name:chararray);
    B = LOAD 'test2.txt' USING PigStorage('\t') AS (bid:int);
    C = JOIN A BY aid LEFT OUTER,B BY bid;
    D = FILTER C BY bid is null;
    DUMP D;
    

    그 ID를 test2.txt가하지 않기 때문에 그래서 위의 예제의 기록에 5,6,7,8 결과에 있어야합니다.

  2. from https://stackoverflow.com/questions/41998767/not-in-clause-in-pig by cc-by-sa and MIT license