簡體   English   中英

如何從當前日期減去一天,然后在Hive中轉換為字符串

[英]How to subtract one day from current date then convert to string in 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)

使用該代碼查詢返回沒有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

結果是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

一旦解析了日期,就可以使用hive中提供的date_sub函數

date_sub(string startdate, int days) 

date_sub('2008-12-31', 1) = '2008-12-30'

您甚至可以點擊以下鏈接。

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

DATE_SUB在HIVE 2.1.0中可用

date_sub(date/timestamp/string startdate, tinyint/smallint/int days)

減去開始日期的天數:date_sub('2008-12-31',1)='2008-12-30'。

在Hive 2.1.0(HIVE-13248)之前,返回類型是一個String,因為創建方法時不存在Date類型。

問題是你試圖從date減去一天的方式。我建議從where子句中的unix時間戳減去一天中的秒數(86400) -

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

對於版本> = Hive 2.0試試這個:

select current_date;

然后嘗試這個:

select date_sub(current_date, 1);

它應該給你當前日期減去1天。

cast(date_sub(CURRENT_DATE,1)as string)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM