我正在尝试对pig中的关系进行筛选,我需要在第一个字段字符串中出现第三个字段的所有记录。我尝试了:(假设我的源关系是src)
Filtered= FILTER SRC BY $0 matches 'CONCAT(".*",$2,".")'; DUMP Filtered;
没有语法错误,但我没有得到任何过滤输出。
lx0bsm1f1#
Pig的 CONCAT 只接受两个参数。请参阅上的文档http://pig.apache.org/docs/r0.10.0/func.html#concat我不知道为什么它在运行时不抱怨,但是你会想把两个串在一起 CONCAT 陈述,比如
CONCAT
CONCAT(".*", CONCAT($2, "."))
得到你想要的线。
eni9jsuy2#
试试这个,
Filtered= FILTER SRC BY $0 matches '(.*)$2(.*)'; DUMP Filtered;
如果第三个字段包含第一个字段,则该结果将被过滤。这是通过使用regex实现的。
5lwkijsr3#
我不认为concat解决了您所期望的问题,更重要的是,matches可能试图匹配整个未赋值的字符串 CONCAT(".*",$2,".") ,这就是为什么你没有得到任何结果您能将其分成两个语句吗?第一个语句创建一个包含concat的evalulated内容的字段,第二个语句执行matches操作:
CONCAT(".*",$2,".")
TMP = FOREACH SRC GENERATE $0, CONCAT(".*",$2,"."); Filtered = FILTER TMP BY $0 matches $1; DUMP Filtered;
或者类似的(完全未经测试)
vnjpjtjt4#
我想你只是有些语法错误正如a所指出的。莱斯特拉,康卡特只接受两个论点。如果需要双面通配符,结尾的“.”应该是“.*”filter语句首选参数周围的括号pig有很多奇怪的边缘案例,涉及双引号,所以尽可能使用单引号 Filtered= FILTER SRC BY ($0 matches CONCAT('.*', CONCAT($2, '.*')));
Filtered= FILTER SRC BY ($0 matches CONCAT('.*', CONCAT($2, '.*')));
4条答案
按热度按时间lx0bsm1f1#
Pig的
CONCAT
只接受两个参数。请参阅上的文档http://pig.apache.org/docs/r0.10.0/func.html#concat我不知道为什么它在运行时不抱怨,但是你会想把两个串在一起
CONCAT
陈述,比如得到你想要的线。
eni9jsuy2#
试试这个,
如果第三个字段包含第一个字段,则该结果将被过滤。这是通过使用regex实现的。
5lwkijsr3#
我不认为concat解决了您所期望的问题,更重要的是,matches可能试图匹配整个未赋值的字符串
CONCAT(".*",$2,".")
,这就是为什么你没有得到任何结果您能将其分成两个语句吗?第一个语句创建一个包含concat的evalulated内容的字段,第二个语句执行matches操作:
或者类似的(完全未经测试)
vnjpjtjt4#
我想你只是有些语法错误
正如a所指出的。莱斯特拉,康卡特只接受两个论点。
如果需要双面通配符,结尾的“.”应该是“.*”
filter语句首选参数周围的括号
pig有很多奇怪的边缘案例,涉及双引号,所以尽可能使用单引号
Filtered= FILTER SRC BY ($0 matches CONCAT('.*', CONCAT($2, '.*')));