我想在 pig 中做的事情在 sql 中很常见。我有格式为 yyy-mm-dd hh:mm:ss 的日期字段,我还有另一个字段,其中包含一个表示小时数的整数。有没有一种方法可以轻松地将整数添加到日期时间字段,以便我们得到我们期望的时钟数学结果。
示例:日期为 2013-06-01 : 23:12:12。
然后我加 2 小时
我应该得到 2013-06-02 01:12:12。
我想在 pig 中做的事情在 sql 中很常见。我有格式为 yyy-mm-dd hh:mm:ss 的日期字段,我还有另一个字段,其中包含一个表示小时数的整数。有没有一种方法可以轻松地将整数添加到日期时间字段,以便我们得到我们期望的时钟数学结果。
示例:日期为 2013-06-01 : 23:12:12。
然后我加 2 小时
我应该得到 2013-06-02 01:12:12。
使用最新版本的 Pig(0.11.0) 应该是可能的。但是小时数(时间)应该按照ISO8601 Duration Format
. 它提供了一个类AddDuration
,允许我们添加一个带有 Duration 对象的 DateTime 对象。您可以在此页面上找到有关 AddDuration 的更多信息。
编辑 :
是的,您可以添加负数。我在我的 Ubuntu 盒子上试过这个:
输入 :
2009-01-07T01:07:01.000Z,PT1S
2008-02-06T02:06:02.000Z,PT1M
2007-03-05T03:05:03.000Z,PT-1H
询问 :
grunt> a = LOAD '/pig.txt' USING PigStorage(',') AS (dt:datetime, dr:chararray);
grunt> b = FOREACH a GENERATE AddDuration(dt, dr) AS dt1;
grunt> dump b;
输出 :
(2009-01-07T01:07:02.000Z)
(2008-02-06T02:07:02.000Z)
(2007-03-05T02:05:03.000Z)