我已经潜伏了一段时间,但最后还有我自己的问题,我在这里或谷歌上找不到。为我缺乏经验而道歉,离学校只有几年。使用Hive 1.2,我遇到了似乎add_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
add_months如何正常工作? (apache链接:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-DateFunctions)。另外,如果我在add_months结果=' 2014-04-30'中包含另一个where语句,我会得到返回的行,它实际上显示了2015-05-01'。飞快的是什么?
如果我在表面上更改查询(简化它或使其更复杂,但让它基本上做同样的事情),有时结果会改变。任何人都可以尝试复制这个并让我知道我不只是疯了吗?在我的结尾有什么样的种类或任何东西可能搞砸了吗?
答案 0 :(得分:0)
使用日期时,使用DATE格式的游戏,因此引擎会照顾其他内容,例如闰年或几个月等。(添加/减少)
文件 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
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;
---------------------------------------