Да, второй подход правильный, вам нужно передать псевдоним в качестве аргумента для макроса, иначе он не будет виден внутри макроса.
с другой стороны, он же, определенные внутри макроса не будет доступа снаружи, в-том случае, если вы хотите получить доступ к псевдониму затем использовать этот формат macro_<my macro_name>_<alias name suffixed with an instance>
Я имитируется как варианты
1. выборки с псевдоним снаружи внутрь макро (с использованием аргументом)
2. Доступа к псевдониму внутри макро на внешнюю сторону (используя макро расширенного формата имя)
пример
in.txt
a,10,1000
b,20,2000
c,30,3000
in1.txt
10,aaa
20,bbb
30,ccc
Pigscript:
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;
Вывод опция1:
СБРОСА С
(10,aaa,a,10,1000)
(20,bbb,b,20,2000)
(30,ccc,c,30,3000)
Выход option2:
DUMP macro_my_macro_test_0
(10,a)
(20,b)
(30,c)
Есть некоторые ограничения в использовании макроса, как
1. Не допускается внутри вложенной для каждого зЬтЬ
2. Не допускается использование любые команды хрюкания
3. не разрешено включать определенную пользователем схему
I sugge Если вы ссылаетесь на ссылку ниже документа, это, безусловно, даст несколько лучших идей о макросах, а также о том, как использовать скрипт для свиней.
http://pig.apache.org/docs/r0.13.0/cont.html#macros