在生成语句中格式化日期

Posted

技术标签:

【中文标题】在生成语句中格式化日期【英文标题】:Formatting Date in Generate Statement 【发布时间】:2013-05-25 13:05:56 【问题描述】:

在 Pig 中,我有一个语句,它基本上将日期附加到我生成的值中。

Data = FOREACH Input GENERATE (CurrentTime()),FLATTEN(group), COUNT(guid)oas Cnt;

输出为我提供了 ISO8601 中的日期 2013-05-25T09:01:38.914-04:00

我怎样才能像"YYYY-MM-DD"一样做到这一点?

【问题讨论】:

【参考方案1】:

您有多种选择:

用 Pig 函数转换它: 例如:

A = load ...
B = foreach A 
  currTime = CurrentTime();
  year = (chararray)GetYear(currTime);
  month = (chararray)GetMonth(currTime);
  day = (chararray)GetDay(currTime);
  generate CONCAT(CONCAT(CONCAT(year, '-'), CONCAT(month, '-')),day) as myDate;

或者将日期作为参数传递给脚本:

pig -f script.pig -param CURR_DATE=`date +%Y-%m-%d`

或者在脚本中声明它:

%declare CURR_DATE `date +%Y-%m-%d`;

然后在脚本中将变量称为'$CURR_DATE'

您还可以创建一个已修改 CurrentTime UDF,您可以在其中使用Joda-Time 库将 DateTime 对象转换为适当的格式。

最简单的方法是在脚本开头声明日期。

【讨论】:

嘿洛兰,谢谢你的回复。事实上,我曾尝试将日期作为参数方法传递。但是今天的最终输出显示的是 1983 而不是 2013-05-25。知道为什么吗?相同的输出参数在将其分配给存储文件的名称时可以正常工作。例如: STORE Output INTO 'Outputs$CURR_DATE 工作正常并显示为 Output2013-05-25。 这是因为如果你做减法:2013-5-25 你会得到 1983。这就是我使用引号 ('$CURR_DATE') 的原因,这样它将被处理为 chararray 而不是 int。 【参考方案2】:

如果您使用的是 Pig 0.12 或更高版本,则可以使用 ToString(CurrentTime(),'yyyy-MM-dd')

您可以使用任何日期时间类型来代替 CurrentTime()

请参阅http://pig.apache.org/docs/r0.12.0/func.html#to-string 了解日期时间格式。

【讨论】:

以上是关于在生成语句中格式化日期的主要内容,如果未能解决你的问题,请参考以下文章

oracle SQL语句,日期格式转换

Oracle插入语句日期格式设置

VB 如何把access中的字符串日期转换成日期格式并能计算日期

PLSQL中SQL语句怎样转换日期型函数为字符型?

oracle 日期格式 格式 转换

sql怎么把年月日日期转成年月格式。