Regex 将pig中的日期从YYYY-mm-dd转换为YYYYmmDD

Regex 将pig中的日期从YYYY-mm-dd转换为YYYYmmDD,regex,apache-pig,Regex,Apache Pig,问题是此列中存在空值,如何在将日期从2016-01-01转换为20160101时处理空值 但是,当我转储该文件时,结果显示为全部空 s = foreach final generate DEL_EFF_DT; dump s; 对格式化日期使用正则表达式似乎是多余的。日期将始终采用相同的格式,因此如果您的目标是删除破折号,只需将其替换为零即可。无论如何,运行正则表达式需要更多的资源 我已经编程6年了,从来都不需要正则表达式。几乎总是有另一种方法来做你需要做的事情。希望这会有所帮助。是的,正如@

问题是此列中存在空值,如何在将日期从2016-01-01转换为20160101时处理空值

但是,当我转储该文件时,结果显示为全部空

s = foreach final generate DEL_EFF_DT;
dump s;

对格式化日期使用正则表达式似乎是多余的。日期将始终采用相同的格式,因此如果您的目标是删除破折号,只需将其替换为零即可。无论如何,运行正则表达式需要更多的资源


我已经编程6年了,从来都不需要正则表达式。几乎总是有另一种方法来做你需要做的事情。希望这会有所帮助。

是的,正如@spoom所提到的

REPLACE(Del_EFF_DT,'-','') AS DEL_EFF_DT;

这将解决问题

在处理空值时可以使用下面的示例代码段

test=  LOAD 'testdata' USING PigStorage(',') as(A:chararray,B:chararray,C:chararray); 
values = FOREACH test GENERATE A==''?'null':(A is null?'null':A)) as A,(B==''?'null':(B is null?'null':B)) as B,(C==''?'null':(C is null?'null':C)) as C; 

你不能简单地用空字符串替换所有的破折号吗?@sp00m是的,谢谢你
test=  LOAD 'testdata' USING PigStorage(',') as(A:chararray,B:chararray,C:chararray); 
values = FOREACH test GENERATE A==''?'null':(A is null?'null':A)) as A,(B==''?'null':(B is null?'null':B)) as B,(C==''?'null':(C is null?'null':C)) as C;