以下がその例です。私は最後の日からデータを取得するために選択構文を作成しようとしています(今日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を使用しています
問題は、日付から日を減算しようとする方法です。where句のUNIXタイムスタンプから日(86400)の秒数を減算することをお勧めします
CAST(TO_DATE(FROM_UNIXTIME(UNIX_TIMESTAMP()-86400))as date)
日付を解析したら、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/
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)より前は、メソッドの作成時に日付型が存在しなかったため、戻り型は文字列でした。
Hive 2.0以降のバージョンの場合:
select current_date;
それからこれを試してください:
select date_sub(current_date, 1);
現在の日付から1日を引いた日付が表示されます。
cast(date_sub(CURRENT_DATE、1)as string)