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

31moq8wy  于 2021-06-21  发布在  Pig
关注(0)|答案(2)|浏览(253)

一旦我做了一个 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 应该打印完全相同的东西)。
我该怎么做?

yyyllmsg

yyyllmsg1#

您可以使用项目范围表达式来获取其中的一部分。
不幸的是,没有办法系统地剥离 A:: 前缀。如果你知道 A (假设是 last ),您可以这样做:

E = foreach D generate .. A::last;

如果你只想从 B 你会的

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

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

6kkfgxo0

6kkfgxo02#

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

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只有id、name、addr等“a”关系列。

相关问题