如果架构未知,则在加入后从一侧获取所有字段
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
用于 rel2
和 rel1
键字段以使 cogroup
像内部联接一样工作。
虽然这可行,但我认为应该有更简单的解决方案。
我有 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
用于 rel2
和 rel1
键字段以使 cogroup
像内部联接一样工作。
虽然这可行,但我认为应该有更简单的解决方案。