我有一个要在宏中使用的别名:
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
作为参数:
define my_macro (foo, z) returns y {
$y = join $z in id, $foo on id;
};
a = my_macro(foo,b);
这条路对吗?
如果 foo
其实是一个比较复杂的对象,会不会每次宏展开都会重新计算 my_macro
?
1条答案
按热度按时间g6ll5ycj1#
是的,第二种方法是正确的,您需要将别名作为参数传递给宏,否则它在宏中不可见。
另一方面,宏内部定义的别名将不能在外部访问,如果您想访问别名,请使用此格式
macro_<my macro_name>_<alias name suffixed with an instance>
我已经模拟了两种选择1从外到内访问别名宏(使用参数)
2从宏内部到外部访问别名(使用宏扩展名称格式)
例子
在.txt中
in1.txt文件
Pig手稿:
选项1的输出:
卸载c
选项2的输出:
转储宏\u我的\u宏\u测试\u 0
在使用宏时有一些限制,例如
1不允许为每个stmt嵌套内部
2不允许使用任何咕噜命令
三。不允许包含用户定义的架构
我建议你参考下面的文档链接,这肯定会给一些关于宏的更好的想法,以及如何使用内部pig脚本。
http://pig.apache.org/docs/r0.13.0/cont.html#macros