2014-11-20 4 views
2

У меня есть псевдоним, который я хочу использовать в макросе:Как я могу ссылаться на внешний псевдоним внутри макроса piglatin?

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?

ответ

0

Да, второй подход правильный, вам нужно передать псевдоним в качестве аргумента для макроса, иначе он не будет виден внутри макроса.

с другой стороны, он же, определенные внутри макроса не будет доступа снаружи, в-том случае, если вы хотите получить доступ к псевдониму затем использовать этот формат 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

Смежные вопросы