Macros 如何从宏内部引用外部别名?
我有一个要在宏中使用的别名:Macros 如何从宏内部引用外部别名?,macros,apache-pig,Macros,Apache Pig,我有一个要在宏中使用的别名: foo = ....; define my_macro (z) returns y { $y = join $z in id, foo on id; }; a = my_macro(b); 唉,我得到了一个错误: Undefined alias: macro_my_macro_foo_0 当然,我可以将foo作为en参数传递: define my_macro (foo, z) returns y { $y = join $z in id, $foo
foo = ....;
define my_macro (z) returns y {
$y = join $z in id, foo on id;
};
a = my_macro(b);
唉,我得到了一个错误:
Undefined alias: macro_my_macro_foo_0
当然,我可以将foo
作为en参数传递:
define my_macro (foo, z) returns y {
$y = join $z in id, $foo on id;
};
a = my_macro(foo,b);
这条路对吗
如果
foo
实际上是一个相对复杂的对象,是否会为my_macro
的每个宏扩展重新计算它?是的,第二种方法是正确的,您需要将别名作为参数传递给macro,否则它在macro内部将不可见
另一方面,宏内部定义的别名将不会在外部访问,如果要访问别名,请使用此格式宏__
a,10,1000
b,20,2000
c,30,3000
10,aaa
20,bbb
30,ccc
define my_macro (foo,z) returns y {
$y = join $z by g1, $foo by f2;
test = FOREACH $y generate $0,$2;
};
foo = LOAD 'in.txt' USING PigStorage(',') AS (f1,f2,f3);
b = LOAD 'in1.txt' USING PigStorage(',') AS (g1,g2);
C = my_macro(foo,b);
DUMP C;
--DUMP macro_my_macro_test_0;
(10,aaa,a,10,1000)
(20,bbb,b,20,2000)
(30,ccc,c,30,3000)
(10,a)
(20,b)
(30,c)