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