猪在 3 月份给出错误结果的天数

Posted

技术标签:

【中文标题】猪在 3 月份给出错误结果的天数【英文标题】:DaysBetween in Pig Giving Wrong Result For Month Of March 【发布时间】:2015-05-11 06:07:30 【问题描述】:

我正在尝试将 vertica 查询转换为 Pig,它基本上可以找出两个日期之间的天数。当我转换代码并尝试在 PIG 中使用 DaysBetween 函数时,它仅在 3 月份给出不同的输出。

PIG 结果:

Y = FOREACH X GENERATE
(DaysBetween((datetime)ToDate('2015-04-01'),ToDate('2015-03-01')));
Output:- (30)

Vertica 结果:

SELECT JULIAN_DAY('2015-04-01')-JULIAN_DAY('2015-03-01');
Output:- (31)

当我在一年中的其他月份检查相同的内容时,我没有收到任何错误。

PIG 结果:

Y = FOREACH X GENERATE
(DaysBetween((datetime)ToDate('2015-03-04'),ToDate('2015-02-04')));
Output:- (28)

Vertica 结果:

SELECT JULIAN_DAY('2015-03-04')-JULIAN_DAY('2015-02-04');
 Output :- 28

我无法找到差异的原因。需要一些关于如何解决问题的建议。

【问题讨论】:

我感觉这里可能存在夏令时问题。在您的第一个示例中,它穿过夏令时边界减去一个小时(并且可能会删除从前一天上午 12 点到晚上 11 点的 1 天)。夏令时是 03-08。你能检验一下这个理论吗?我现在附近没有 Hadoop 集群。 【参考方案1】:

将时区指定为 UTC 或 GMT 会有所帮助。

Y = FOREACH X GENERATE
(DaysBetween((datetime)ToDate('2015-04-01', 'yyyy-MM-dd', 'UTC'),ToDate('2015-03-01', 'yyyy-MM-dd', 'UTC')));

【讨论】:

以上是关于猪在 3 月份给出错误结果的天数的主要内容,如果未能解决你的问题,请参考以下文章

日期根据天数变化但其他月份不起作用

C语言:给出年份和月份,计算并显示该年该月的天数

JS获取指定月份的天数两种实现方法

计算年月天数

计算年月天数

mysql计算2个日期的月份差和天数差