与配置单元中的add\u months函数不一致?

zzoitvuj  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(402)

我已经潜伏了一段时间,但最后有我自己的问题,我不能在这里或谷歌上找到。很抱歉,我没有经验,才离开学校几年。在使用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'。到底怎么回事?
如果我简单地修改查询(简化它或使它更复杂,但让它做基本相同的事情),有时结果会改变。有谁能试着复制一下,让我知道我不只是疯了吗?我这边有没有什么东西会把事情搞砸?

vuktfyat

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

Create table date_nov (client String, datemonth String, x int )  ROW FORMAT     DELIMITED FIELDS TERMINATED BY ",";
LOAD DATA INPATH '/user/root/date_nov.txt' into TABLE date_nov ;

hive> select * from date_nov;
OK
ClientID1        2015-01        1
ClientID2        2015-02        1
ClientID3        2015-04        1
ClientID4        2015-04        1
ClientID5        2015-05        1
ClientID6        2015-06        1
ClientID7        2015-07        1
ClientID8        2015-08        1
ClientID9        2015-09        1
ClientID10       2015-10        1
ClientID11       2015-11        1
ClientID12       2015-12        1

select * , add_months(to_DATE(concat(trim(datemonth),'-01' )),x)   from date_nov;

---------------------------------------

相关问题