2013-02-14 26 views
0

我被阿蘭·蓋茨的工作我的方式,通過編程豬讀一包的某一個領域,我在腳本中得到一個錯誤引入宏的功率:http://ofps.oreilly.com/titles/9781449302641/advanced_pig_latin.html#macros使用參數

--macro.pig 
-- Given daily input and a particular year, analyze how 
-- stock prices changed on days dividends were paid out. 
define dividend_analysis (daily, year, daily_symbol, daily_open, daily_close) 
returns analyzed { 
divs   = load 'NYSE_dividends' as (exchange:chararray, 
        symbol:chararray, date:chararray, dividends:float); 
divsthisyear = filter divs by date matches '$year-.*'; 
dailythisyear = filter $daily by date matches '$year-.*'; 
jnd   = join divsthisyear by symbol, dailythisyear by $daily_symbol; 
$analyzed  = foreach jnd generate dailythisyear::$daily_symbol, 
        $daily_close - $daily_open; 
}; 

daily = load 'NYSE_daily' as (exchange:chararray, symbol:chararray, 
     date:chararray, open:float, high:float, low:float, close:float, 
     volume:int, adj_close:float); 
results = dividend_analysis(daily, '2009', 'symbol', 'open', 'close'); 

的錯誤是在dailythisyear::$daily_symbol的雙冒號後出現的意外$符號。

你將如何解決這個問題,而不通過更換行:

$analyzed = foreach jnd generate divsthisyear::symbol, $daily_close - $daily_open; 

回答

2

參數替換無法宏內部使用。參數應顯式傳遞給宏,參數替換僅用於頂層。

您可以使用-dryrun命令行參數來查看宏如何在線擴展。

因此,無論如何你不能在宏中這樣參數使用。

+0

有沒有任何資料來支持你的回答?因爲這個例子來自於_Programming Pig_這本書,它是宏中參數替換的例子,所以聽起來很奇怪,它在定義上不起作用。是版本依賴的情況?甚至最新的豬版本都不允許這樣做? – ATN 2013-03-30 17:20:44

+1

http://pig.apache.org/docs/r0.10.0/cont.html#define-macros(回答來源)對於版本依賴關係,您必須查看它。我不太確定。 – Gargi 2013-04-03 05:11:31