PigLatin-查找给定日期的月末日期

时间:2015-05-13 15:34:35

标签: date apache-pig

在Pig Latin中,是否有内置函数来查找给定日期的月末日期?例如,如果给定日期为“2015-03-15”,则返回的月末日期应为“2015-03-31”,如果给定日期为“2015-04-15”,则月末日期应为“ 2015年4月30' 日。

2 个答案:

答案 0 :(得分:3)

您就是这样做的:

REGISTER /usr/lib/pig/piggybank.jar;

DEFINE ISOToMonth org.apache.pig.piggybank.evaluation.datetime.truncate.ISOToMonth();

%declare END_OF_MONTH SubtractDuration(AddDuration(ToDate(ISOToMonth('2015-03-15')),'P1M'),'P1D')

A = LOAD 'DummyFileWithOneRow.txt' USING PigStorage(',') AS (f1:chararray, f2:chararray);

result = FOREACH A GENERATE
        f1 AS f1,
        $END_OF_MONTH AS end_of_month;

DUMP result

此次运行的结果是: (1,2015-03-31T00:00:00.000Z)

  • 您现在可以将此结果转换为所需的格式。
  • 您可以将此计算作为加载值的foreach的一部分。

答案 1 :(得分:1)

执行此类操作的常用方法,如果您没有发现有问题的语言已经具有“执行此类操作”的内置函数集,则是......在这种情况下:

  • 确定当月的第一天。 (“月/ 01 /年”这是您“手动”执行的步骤。“)
  • 添加“一个月”。 (你的语言中应该有一些类型的“DateAdd()”函数...)
  • 最后,使用相同的功能,“减去一天。”

12月15日=> 12月1日=> 1月1日(明年)=> 12月31日(今年)。

但首先,仔细看看。 “会计师希望做到这一切所有时间。” 通常是一个非常好的,有时是非常好的函数集来进行日期操作。 (如果他们没有内置于该语言中,那么通常会有一个由其他人编写并完善的“好东西”库。)