2015-05-01 100 views
2

在每個豬拉丁腳本文件中設置的一組宏,罐和屬性。已將所有這些移至common.pig。 目標是在所有豬拉丁文件中包含這個常見豬檔案。導入豬腳本時出錯

嘗試以下方法在Invoke Pig Latin script from other Pig script

方法1建議:使用運行,按預期工作。

  Usage : RUN common.pig; 

方法2:使用IMPORT是導致錯誤。

  Usage : IMPORT 'common.pig'; 

      Error message : 

      ERROR 1200: <file common.pig, line 1, column 0> Syntax error, unexpected symbol at or near 'SET' 

       org.apache.pig.impl.logicalLayer.FrontendException: ERROR 1000: Error during parsing. <file common_macro.pig, line 1, column 0> Syntax error, unexpected symbol at or near 'SET' 
        at org.apache.pig.PigServer$Graph.parseQuery(PigServer.java:1608) 
        at org.apache.pig.PigServer$Graph.registerQuery(PigServer.java:1547) 

我想了解爲什麼第二種方法失敗。我對IMPORT的理解是,它將導入的文件直接寫入豬腳本中以代替IMPORT語句,如果是這種情況,理想情況下它不應該拋出上述錯誤。

對此的任何輸入/想法。

另外,從代碼模塊化/可維護性/執行角度來看,在上述用例中,最好使用EXEC或RUN命令來調用common.pig文件。

文件:

common.pig

SET job.priority HIGH; 
-- SET few others ...; 

REGISTER snappy-java-1.0.4.1.jar; 
-- REGISTER piggybank, avro and other required jars 

test_import.pig

IMPORT 'common.pig'; 

A = load 'test/part*' USING org.apache.pig.piggybank.storage.avro.AvroStorage(); 
DUMP A; 
+0

請加豬文件 – Mzf

+0

@Mzf增加的公共和test_import豬腳本 –

回答

3

SET未在導入文件的支持。

閱讀IMPORT Macro表明Grunt Shell command不支持 - 見下文

用法使用IMPORT命令導入在一個單獨的文件中定義爲你的豬腳本宏。

IMPORT將宏定義添加到Pig Latin命名空間;然後可以調用這些宏,就好像它們是在同一個文件中定義的一樣。

宏只能包含Pig拉丁語句; Grunt shell命令不支持 。

+0

謝謝你,我的理解是繁重的shell命令不IMPORT宏內部支持,這是否包括utitlity命令 - 設置? 在我們正在導入的common.pig中只有REGISTER命令時,觀察到的行爲也是如此? –

+0

我認爲你不能在導入文件中使用register命令 – Mzf