Hive SQL中的datediff、current_date使用问题

12 sec read

Hive SQL中的datediff函数返回的是2个日期的天数。在使用过程中发现了一个比较有趣的坑:

其中createdate为datetime类型,执行SQL发现存在recency>T的数据。出现上述问题,初步判断是由于createtime导致的,查询文档发现并不是这么一回事:

执行如下代码,结果也存在问题:

那么最有可能出现问题的是CURRENT_DATE,其中CURRENT_DATE的值等于TO_DATE(FROM_UNIXTIME(UNIX_TIMESTAMP()),使用TO_DATE(FROM_UNIXTIME(UNIX_TIMESTAMP())再做测试,结果又是正常的。

至此,大致可以将原因定位到CURRENT_DATE上,中间最主要的区别是:current_date返回的内容是date格式,而to_date返回的是字符串(2.1版本之前是string,2.1版本后面是返回date)。再做一次进一步测试如下:

执行后的结果为:0 0 0 0 1 0 1 0,进一步寻找,可获得如下信息:

打赏作者
微信支付标点符 wechat qrcode
支付宝标点符 alipay qrcode

北大开源分词工具pkuseg

pkuseg简介 pkuseg是由北京大学语言计算与机器学习研究组研制推出的一套全新的中文分词工具包。pkus
1 min read

使用Python进行中文繁简转换

中文繁体、简体的差异,在NPL中类似英文中的大小写,但又比大小写更为复杂,比如同样为繁体字,大陆、香港和台湾又
1 min read

Python因子分解库:fastFM

FastFM简介 FastFM的主要特点是将是将因子分解封装成scikit-learn API接口,核心代码使
2 min read

2 Replies to “Hive SQL中的datediff、current_dat…”

  1. 我也遇到了同样的问题
    感谢作者,不知道现在有没有反馈了
    hive> select datediff(to_date(current_date()), to_date(‘2019-02-14’));
    OK
    35
    hive> select datediff(current_date(), to_date(‘2019-02-14’));
    OK
    34

    1. 我也遇到了同样的问题
      感谢作者,不知道现在有没有反馈了
      hive> select datediff(to_date(current_date()), to_date(‘2019-02-14’));
      OK
      35
      hive> select datediff(current_date(), to_date(‘2019-02-14’));
      OK
      34

      已经看到hive的bug 解决了,感谢作者

发表评论

电子邮件地址不会被公开。 必填项已用*标注