Pig Latin多列非空过滤逻辑求助:仅移除指定列全空行
解决Pig Latin多列过滤逻辑问题
嘿,我完全懂你的困扰!你当前的过滤条件逻辑方向搞反啦——你写的B = FILTER A BY $8!='' AND $9!='' AND $10!='' AND $11!='';是要求**$8到$11这四列必须全部非空**才会保留该行,这就导致那些“部分列空、部分列非空”的行被误过滤掉了。
而你真正需要的是仅移除这四列全为空的行,也就是只要这四列里至少有一列非空,就保留该行。对应的正确写法应该是取反“四列全为空”的判断:
B = FILTER A NOT BY ($8 == '' AND $9 == '' AND $10 == '' AND $11 == '');
或者也可以把NOT放在括号里,效果完全一致:
B = FILTER A BY NOT ($8 == '' AND $9 == '' AND $10 == '' AND $11 == '');
简单拆解下逻辑:这个条件会先检查是否存在$8到$11全为空的情况,然后把这类行排除掉,剩下的就是所有“至少有一列非空”的行,完美匹配你的需求。
另外补充个小提示:如果你的数据里除了空字符串'',还存在NULL值的话,可能需要把判断条件扩展一下,比如写成($8 IS NOT NULL AND $8 != ''),避免因为NULL值导致的意外过滤;但如果你的场景里只有空字符串的话,上面的写法就足够啦。
内容的提问来源于stack exchange,提问作者Brad Simkins
相关产品推荐
相关产品推荐

