我有一个类似下面的 pig 脚本:
a = LOAD 'feedname.hourly_data'
USING org.apache.hcatalog.pig.HCatLoader();
b = FILTER a BY dt=='$date{00}';
c = GROUP b ALL;
d = FOREACH c GENERATE COUNT(b);
dump d;
脚本使用以下参数执行:
pig -useHCatalog -p date=20140708 my_script.pig
请注意,此脚本使用硬编码的 dt 值:
a = LOAD 'feedname.hourly_data'
USING org.apache.hcatalog.pig.HCatLoader();
b = FILTER a BY dt=='2014070800';
c = GROUP b ALL;
d = FOREACH c GENERATE COUNT(b);
dump d;
但是,当我在传递 date=20140708
参数后执行时,查询将返回零结果。有谁知道为什么会这样?如果没有足够的信息可以说明,我应该测试的第一件事是什么?
最佳答案
您可以 use the -dryrun
option查看参数替换后脚本的外观。这会告诉您是否按照预期进行过滤。
Pig 似乎无法处理字符串中的参数,如果它后面没有跟在参数名称中的非法字符(如 /
)。相反,在您的情况下,您应该能够使用 CONCAT
:
b = FILTER a BY dt==CONCAT('$date', '00');
关于hadoop - PIG - 将字符串连接到参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24811148/