2017-01-31 6 views
0

Я пытаюсь выяснить разницу между двумя таблицами (Source и Destination) с помощью Diff() метод в свинью, для того, чтобы добиться того, что:NOT IN функции в свинью

sourcenew = LOAD 'hdfs://HADOOPMASTER:54310/DVTTest/Source.txt' USING PigStorage(',') as (ID:chararray,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:chararray,Name:chararray,FirstName:chararray ,LastName:chararray,Vertical_Name:chararray ,Vertical_ID:chararray,Gender:chararray,DOB:chararray,Degree_Percentage:chararray ,Salary:chararray,StateName:chararray); 

cogroupnew= COGROUP sourcenew by ID inner, destnew by ID inner; 

diffnew = FOREACH cogroupnew GENERATE DIFF(sourcenew,destnew); 

DUMP diffnew; 

дает различия между две таблицы или вернуть пустую сумку {}, если соответствует кортежи, он отлично работает до этого, мой следующий шаг, чтобы найти дополнительные записи в исходных файлах, которые не существуют в пункт назначения, для этого

cogroupextrainsource= COGROUP sourcenew by ID inner, destnew by ID; 
filterextrainsource= FILTER cogroupextrainsource BY ID NOT (cogroupnew) 

его метания ошибки как ожидается. Нужна помощь, чтобы найти дополнительные источники. Помощь была бы очень признательна.

Спасибо!

ответ

0

Вам не нужен знак $ рядом с идентификатором имени столбца. $ Используется только тогда, когда вы не хотите обращаться к столбцу по имени.

cogroupextrainsource = COGROUP sourcenew by ID inner, destnew by ID;