如何从当前日期中减去一天然后在 Hive 中转换为字符串

新手上路,请多包涵

情况就是这样。我正在尝试使用选择语法来获取前一天的数据(今天我们有 21.10,因此我应该有 20.10 日期查询的数据将成为 Talend 中 ETL 过程的一部分,所以我不能简单地做 where date = '2016-10-20' ) 问题是数据源中的所有列都是 VARCHAR 或 STRING 类型 - 日期也是。来源在 Hive Hadoop 上。

我的代码:

 select
cast(to_date(from_unixtime(unix_timestamp(dzien ,'yyyyMMdd'), 'yyyy-MM-dd')) as date),
count(ns_utc) as ILOSC_ODSLON
from portal.portal_data
where
portal_data.opl_ev_ty is null
and portal_data.opl_ev_as is null
and cast(to_date(from_unixtime(unix_timestamp(dzien ,'yyyyMMdd'), 'yyyy-MM-dd')) as date) = CAST(TO_DATE(FROM_UNIXTIME(UNIX_TIMESTAMP()))as date) - interval '1' day

GROUP BY
cast(to_date(from_unixtime(unix_timestamp(dzien ,'yyyyMMdd'), 'yyyy-MM-dd')) as date)

使用该代码查询除了列名之外什么都不返回。问题可能出在这部分 = CAST(TO_DATE(FROM_UNIXTIME(UNIX_TIMESTAMP()))as date) - interval '1' day 上。

我做了一些测试。当我运行这个查询时

select CAST(TO_DATE(FROM_UNIXTIME(UNIX_TIMESTAMP()))as date) - interval '1' day

结果是 2016-10-20 00:00:00.0 部分 00:00:00.0 可能会破坏我的查询,因为在主查询中而不是 = CAST(TO_DATE(FROM_UNIXTIME(UNIX_TIMESTAMP()))as date) - interval '1' day 我将条件 = '2016-10-20' 结果是 asd预期的。

你能指导我如何解决这个问题吗?

我使用的是 SQL Workbench 而不是 Hue

原文由 Voystin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

问题是您尝试从日期中减去一天的方式。我建议从 where 子句中的 unix 时间戳中减去一天中的秒数(86400)-

 CAST(TO_DATE(FROM_UNIXTIME(UNIX_TIMESTAMP()-86400))as date)

原文由 Rahul Sharma 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果 Hive 版本不支持 date_sub ,您可以破解 date_add 并传递 -1 作为间隔参数。

 select current_date as curr_date , date_add(current_date,-1) curr_minus_1;

curr_date  |  curr_minus_1
2020-03-03 |  2020-03-02

原文由 ZeroDecibels 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进