Apache pig 如何使用通配符投影别名?

Apache pig 如何使用通配符投影别名?,apache-pig,Apache Pig,一旦我按id加入a,按id加入B,我就会得到一个别名,字段为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::*; 我想要的是模式与A相同的E(即描述E和描述A应该打印完全相同的内容) 我该怎么做呢?你可以用一条路走到那里 不幸的是,没有办法系统地去掉A::前缀。如果您知道A的最后一个字段的名称(假设它是last),

一旦我按id加入a,按id加入B,我就会得到一个别名,字段为
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::*;
我想要的是模式与
A
相同的
E
(即
描述E
描述A
应该打印完全相同的内容)

我该怎么做呢?

你可以用一条路走到那里

不幸的是,没有办法系统地去掉
A::
前缀。如果您知道
A
的最后一个字段的名称(假设它是
last
),则可以执行以下操作:

E = foreach D generate .. A::last;
如果您只需要
B
中的字段,您可以这样做

E = foreach D generate B::first ..;

如果您真的需要应用特定的模式,也许您可以定义一个宏,在需要时应用此模式,这样您就可以覆盖来自分组、加入等的任何更改。

加入后无法使用通用别名。但是您可以从联接结果生成特定列。 比如说,

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具有“A”关系列,如id、name、addr等。

您介意新模式是否仍在所有字段前面加有
A::
前缀吗?我不希望。别名稍后保存为Json并由其他人读取。。。
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);