我正在尝试对pig中的关系进行过滤,我需要在第一个字段字符串中出现第三个字段的所有记录。
我尝试过: (假设我的源关系是SRC)
Filtered= FILTER SRC BY $0 matches 'CONCAT(".*",$2,".")';
DUMP Filtered;
没有语法错误,但我没有获得Filtered的任何输出。
答案 0 :(得分:4)
Pig的CONCAT
只有两个参数。请参阅http://pig.apache.org/docs/r0.10.0/func.html#concat
我不确定为什么它不会在运行时抱怨,但你想要将两个CONCAT
语句串起来,比如
CONCAT(".*", CONCAT($2, "."))
获取你想要的字符串。
答案 1 :(得分:2)
我不认为CONCAT正在解决你期望的问题,更多的是匹配可能试图匹配整个未经评估的字符串CONCAT(".*",$2,".")
,这就是为什么你没有得到任何结果
你可以把它分成两个语句,第一个是你创建一个包含CONCAT评估内容的字段,第二个是执行匹配操作:
TMP = FOREACH SRC GENERATE $0, CONCAT(".*",$2,".");
Filtered = FILTER TMP BY $0 matches $1;
DUMP Filtered;
或类似的东西(完全未经测试)
答案 2 :(得分:1)
我认为你只是有一些语法错误
Filtered= FILTER SRC BY ($0 matches CONCAT('.*', CONCAT($2, '.*')));
答案 3 :(得分:0)
试试这个,
Filtered= FILTER SRC BY $0 matches '(.*)$2(.*)';
DUMP Filtered;
如果第三个字段包含第一个字段,那么将过滤该结果。 这是通过使用Regex完成的。