[英]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.