PIG 中的嵌套 FILTER

Nested FILTER in PIG

我想在 Pig 中执行嵌套过滤语句。例如:

查询:

select trim(udc1.drky) drky,
    trim(udc1.drsy) drsy, 
    trim(udc1.drrt) drrt,
    trim(udc1.drdl01) drld01,
    'Fixed' as AssetType
from f0005 udc1 
where trim(udc1.drsy) = '12'
and trim(udc1.drrt) = 'C2' 
and trim(udc1.drky) not in (
    select trim(drky)
    from f0005
    where trim(drsy) = '57' and trim(drrt) = 'AC'
  )

我需要将上述查询转换为 Pig 脚本。但是,我不知道如何从内部查询中获取过滤器并将它们与外部查询相关联。我可以将 Pig UDF 编写为最后一个选项,但宁愿在本机 Pig 中实现解决方案。

请帮我解决以上问题。

假设以下是您的输入

输入按照

的布局
drky, drsy, drtt, drld01

1,57,AC,999
2,57,AC,899
2,12,C2,799
1,12,C2,699
4,57,BC,990
5,12,C3,998
6,12,C2,997

根据您的查询,预期输出为

6,12,C2,997

在 Pig 中,您可以借助 JOINS 实现这一点。请查看下面的代码

 records = LOAD '/user/user/inputfiles/assets.txt' USING PigStorage(',') AS(drky:chararray,drsy:chararray,drtt:chararray,drld01:chararray);

records_filter = FILTER records BY drsy == '57' AND drtt == 'AC';

records_each = FOREACH records_filter GENERATE drky as drky_temp;

records_join = JOIN records BY drky LEFT OUTER, records_each BY drky_temp;

records_join_filter = FILTER records_join BY drky_temp is null and drsy == '12' AND drtt == 'C2';

records_output   = FOREACH records_join_filter GENERATE drky, drsy, drtt, drld01, 'FIXED' AS asset_type;

dump records_output;

按照上面的 Pig 脚本输出

  6,12,C2,997,FIXED