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

Voy*_*tin 7 sql hadoop hive

情况就是这样.我正在尝试使用select语法从最后一天获取数据(今天我们有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)
Run Code Online (Sandbox Code Playgroud)

使用该代码查询返回没有exept列名称.问题可能出在这一部分= 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
Run Code Online (Sandbox Code Playgroud)

结果是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'结果是预期的.

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

而不是Hue我正在使用SQL Workbench

lon*_*tar 19

解析日期后,使用date_sub配置单元中可用的功能

date_sub(string startdate, int days) 

date_sub('2008-12-31', 1) = '2008-12-30'
Run Code Online (Sandbox Code Playgroud)

您甚至可以点击以下链接.

https://www.qubole.com/resources/cheatsheet/hive-function-cheat-sheet/


San*_*jiv 7

DATE_SUB在HIVE 2.1.0中可用

date_sub(date/timestamp/string startdate, tinyint/smallint/int days)
Run Code Online (Sandbox Code Playgroud)

减去开始日期的天数:date_sub('2008-12-31',1)='2008-12-30'。

在Hive 2.1.0(HIVE-13248)之前,返回类型为String,因为创建方法时不存在Date类型。


Rah*_*rma 5

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

CAST(TO_DATE(FROM_UNIXTIME(UNIX_TIMESTAMP()-86400))as date) 
Run Code Online (Sandbox Code Playgroud)


Car*_*bon 5

对于版本 >= Hive 2.0 试试这个:

select current_date;
Run Code Online (Sandbox Code Playgroud)

然后试试这个:

select date_sub(current_date, 1);
Run Code Online (Sandbox Code Playgroud)

它应该给你当前日期减去 1 天。