有没有办法动态计算猪的LOAD语句的输入值?从概念上讲,我想做这样的事情:
%declare MYINPUT com.foo.myMethod('2013-04-15');
raw = LOAD '$MYINPUT' ...
myMethod()是一个接受日期作为输入的UDF,并以字符串形式返回(逗号分隔的)目录列表。然后将该字符串作为LOAD语句的输入。
感谢。
答案 0 :(得分:0)
对我来说听起来不像myMethod()需要是UDF。假设这个目录列表不需要在map中计算,你可以运行函数来获取字符串,然后将它作为传递给pig的属性。如果你的驱动程序是在下面提供的java中,请提供示例:
String myInput = myMethod("2013-04-15");
PigServer pig = new PigServer(ExecType.MAPREDUCE);
Map<String,String> myProperties = new HashMap<String,String>();
myProperties.put("myInput",myInput);
pig.registerScript("myScriptLocation.pig");
然后您的脚本将以
开头raw = LOAD '$myInput' USING...
这假设您的myInput字符串是可以读取的全局格式的PigStorage,或者您有一个不同的LoadFunc可以处理逗号分隔的字符串。
答案 1 :(得分:0)
I had a similar issue and opted for a Java LoadFunc implementation instead of a pre-processor。使用自定义LoadFunc意味着脚本仍然可以由分析师使用stock pig可执行文件运行,并且不需要其他依赖项。