我执行join A by id, B by id
后,会得到包含字段A::f...
,B::f..
的别名。
有没有办法只在A
字段上投影?
C = join A by id, B by id;
D = filter C by B::n < 1000;
E = foreach D generate A::*;
我得到了
Unexpected character '*'
我想要的是E
,架构相同到A
(即describe E
和describe A
应打印完全相同的内容)
我该怎么做?
答案 0 :(得分:1)
您可以使用project-range expression来获取部分路径。
不幸的是,没有办法系统地删除A::
前缀。如果你知道A
的最后一个字段的名称(假设它是last
),你可以这样做:
E = foreach D generate .. A::last;
如果您只想要来自B
的字段,那么
E = foreach D generate B::first ..;
如果您确实需要应用特定架构,也许您可以定义一个在需要时应用此架构的宏,这样您就可以覆盖来自分组,加入等的任何更改。
答案 1 :(得分:0)
加入后无法拥有共同的别名。但您可以从联接结果生成特定列。 例如,
A = load 'data1' as (id,name,addr);
B = load 'data2' as (id,name2,addr2);
C = join A by id,B by id; //Now C has id,name,addr,id,name2,addr2
D = Foreach C generate($0,$1,$2);
现在关系D有了&#39; A&#39;关系列,例如id,name,addr only。