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

convert a date in pig from YYYY-mm-dd to YYYYmmDD

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

REGEX_EXTRACT(Del_EFF_DT,'\d{4}\d{2}\d{2}\s',1) AS DEL_EFF_DT;

然而,当我转储该文件时,结果全部为空

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;