2016-10-21 10 views
3

これはケースです。私は最後の日からデータを取得するために選択構文を作成しようとしています(今日は21.10です。その結果、20.10の日付クエリを持つデータがTalendのETLプロセスの一部になるのでを実行できません) 問題は、データ・ソース内のすべての列がVARCHARまたはSTRING型であることです。ソースはHive Hadoopにあります。現在の日付から1日を引いた後、ハイブで文字列に変換する方法

マイコード:

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です。

私はいくつかのテストを行いました。 00::私はこのクエリを実行している場合は

select CAST(TO_DATE(FROM_UNIXTIME(UNIX_TIMESTAMP()))as date) - interval '1' day 

結果は2016-10-20 00:00:00.0と一部00である00.0は、おそらくメインクエリの代わりに、= CAST(TO_DATE(FROM_UNIXTIME(UNIX_TIMESTAMP()))as date) - interval '1' dayに私が期待されているなどの条件= '2016-10-20'結果を入れているときbecasue、私のクエリ遺跡。

この問題の解決方法を教えてください。代わりに、私はSQLワークベンチ

+0

あなたの問題を正しく理解しているかどうかはわかりません。 unixタイムスタンプからの1秒間の秒数(43200)where where節でtry-CAST(TO_DATE(FROM_UNIXTIME(UNIX_TIMESTAMP() - 43200))を日付として使用します。 –

+0

@Rahul Sharmaソリューションが動作します - 。 – Voystin

答えて

1

問題を使用していフエ

は、あなたがUNIXタイムスタンプから当日(86400)に秒数を減算することをお勧めdate.Iから日を減算しようとしている方法です。 clause-

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

同様のアイデアだが、時間の精度を保つ。この場合、私はタイムスタンプとして1時間の 'cast((cast(yourtimestampcolumn as bigint)-1 * 3600)を減算します)' – mishkin

1

DATE_SUBは

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

が開始日の日数を減算HIVE 2.1.0で利用可能である:DATE_SUB( '2008-12-31'、1)=「2008-12- 30 '。

Hive 2.1.0(HIVE-13248)以前は、メソッドの作成時にDate型が存在しなかったため、戻り値の型はStringでした。

関連する問題