Apache pig Apache Pig如何在关系上强制实施模式

Apache pig Apache Pig如何在关系上强制实施模式,apache-pig,Apache Pig,我需要在清管器中执行过滤操作。有两种关系“a”和“b”。每个字段都有一个ID和一个时间戳,以及许多其他字段。我想返回一个版本的“a”,其中与“b”有一定时间差的每一行都被删除。两个关系中的行都是无序的,但根据ID进行匹配 问题是,在操作之后,我陷入了一个与“b”中的一组字段的关系中。我见过的唯一一种删除列的方法是下面的FOREACH语句,但是实际的关系有大量的元素,使得代码庞大,难以维护,并且有缺陷 a = LOAD 'a.txt' AS (a1:chararray, aTime:chararr

我需要在清管器中执行过滤操作。有两种关系“a”和“b”。每个字段都有一个ID和一个时间戳,以及许多其他字段。我想返回一个版本的“a”,其中与“b”有一定时间差的每一行都被删除。两个关系中的行都是无序的,但根据ID进行匹配

问题是,在操作之后,我陷入了一个与“b”中的一组字段的关系中。我见过的唯一一种删除列的方法是下面的FOREACH语句,但是实际的关系有大量的元素,使得代码庞大,难以维护,并且有缺陷

a = LOAD 'a.txt' AS (a1:chararray, aTime:chararray, aId:chararray);
b = LOAD 'b.txt' AS (b1:chararray, bTime:chararray, bId:chararray);

--Match a and b rows together based on similar ID's
ab = JOIN a BY aId LEFT OUTER, b BY bId;

--Remove rows with a big difference in timestamps
ab = FILTER ab BY timeDifference(a::aTime, b::bTime) < 60;

--ab has columns from b left over, I only want columns from relation a
aResult = FOREACH ab GENERATE
    a1 AS a1,
    aTime AS aTime,
    aId AS aId; --This list is way too awkward
a=a.txt加载为(a1:chararray,aTime:chararray,aId:chararray);
b=加载“b.txt”为(b1:chararray,b时间:chararray,投标:chararray);
--根据相似的ID将a行和b行匹配在一起
ab=通过左外辅助装置连接a,通过投标连接b;
--删除时间戳差异较大的行
ab=按时间差(a::aTime,b::bTime)<60过滤ab;
--ab有来自b的列剩余,我只想要来自关系a的列
aResult=FOREACH ab GENERATE
a1作为a1,
时间就像时间一样,
援助作为援助--这张单子太难看了

是否有更好的方法在Pig中执行此类操作,根据不同关系中的列删除关系中的行?

可能类似于,aResult=FOREACH ab generate$0..$n;其中n是“a”中的列数减去1。只需尝试使用此方法即可找到正确的数字。aID在数据集中是唯一的吗?