猪在 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 月份给出错误结果的天数的主要内容,如果未能解决你的问题,请参考以下文章