如果架构未知,则在加入后从一侧获取所有字段

Get all fields from one side after join if schema unknown

我有 2 个关系,没有模式:

rel1 = load '$path1' using PigStorage('\t');
rel2 = load '$path2' using PigStorage('\t');

我想通过第一个字段加入他们并从 rel1 获取所有字段。我怎样才能用 Pig 做到这一点?我没有运气使用 rel1.[=13=].. 语法:

filtered = foreach (join rel1 by [=11=], join rel2 by [=11=]) generate ???

最后,我使用 cogroup 表达式管理它:

定义 FirstTupleFromBag datafu.pig.bags.FirstTupleFromBag;

rel1 = load '$path1' using PigStorage('\t');
rel2 = load '$path2' using PigStorage('\t');

filtered = foreach (cogroup rel1 by [=10=], rel2 by [=10=]) generate flatten(rel1.[=10=]), flatten(rel2.[=10=]), flatten(FirstTupleFromBag(rel1, null));

result = foreach filtered generate ..;

我将 flatten 用于 rel2rel1 键字段以使 cogroup 像内部联接一样工作。

虽然这可行,但我认为应该有更简单的解决方案。