我已经潜伏了一段时间,但最后有我自己的问题,我不能在这里或谷歌上找到。很抱歉,我没有经验,才离开学校几年。在使用hive1.2时,我遇到了这样一种情况:add\u months函数似乎不能正常/一致地工作。
简化一下,我基本上有一个带有clientid、yyyy-mm和int的表。
select clientid, concat(yearmonth, '-01'), integer, add_months(concat(yearmonth, '-01'), integer)
from tablea
where yearmonth = '2015-04' group by clientid, yearmonth, integer;
我使用where语句,因为这似乎只影响4月和11月的日期。我发现:
ClientID1, 2015-04-01, 1, 2015-05-01
ClientID2, 2015-04-01, 1, 2015-05-01
ClientID3, 2015-04-01, 1, 2015-05-01
ClientID4, 2015-04-01, 1, 2014-04-30
ClientID5, 2015-04-01, 1, 2014-04-30
ClientID6, 2015-04-01, 1, 2014-04-30
加法月到底是怎么工作的(apache链接:https://cwiki.apache.org/confluence/display/hive/languagemanual+udf#languagemanualudf-日期函数)。另外,如果我包含另一个where语句,其中add\u months result='2014-04-30',我将得到返回的行,其中实际显示为'2015-05-01'。到底怎么回事?
如果我简单地修改查询(简化它或使它更复杂,但让它做基本相同的事情),有时结果会改变。有谁能试着复制一下,让我知道我不只是疯了吗?我这边有没有什么东西会把事情搞砸?
1条答案
按热度按时间vuktfyat1#
在处理日期时,使用日期格式的feild,这样引擎将处理闰年或月份中的天数等其他事情(添加/删除)
确保你的领域没有空白或特殊字符,我有以下,它的工作完美
文件client1,2015-01,1 client2,2015-02,1 client3,2015-04,1 client4,2015-04,1 client5,2015-05,1 client6,2015-06,1 client7,2015-07,1 client8,2015-08,1 client9,2015-09,1 client10,2015-10,1 client11,1 client12,2015-12,1