web-dev-qa-db-ja.com

現在の日付から1日を減算し、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'_の結果は期待どおりです。

この問題の解決方法を教えていただけますか?

Hueの代わりにSQL Workbenchを使用しています

7
Voystin

問題は、日付から日を減算しようとする方法です。where句のUNIXタイムスタンプから日(86400)の秒数を減算することをお勧めします

CAST(TO_DATE(FROM_UNIXTIME(UNIX_TIMESTAMP()-86400))as date) 
5
Rahul Sharma

日付を解析したら、date_sub Hiveで使用可能な関数

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/

19
loneStar

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)より前は、メソッドの作成時に日付型が存在しなかったため、戻り型は文字列でした。

7
Sanjiv

Hive 2.0以降のバージョンの場合:

select current_date;

それからこれを試してください:

select date_sub(current_date, 1);

現在の日付から1日を引いた日付が表示されます。

4
Carbon

cast(date_sub(CURRENT_DATE、1)as string)

0